banner
SlhwSR

SlhwSR

热爱技术的一名全栈开发者
github
bilibili

彻底玩6正则(1)

1. 為什麼使用正則表達式?#

小例子#

假設有一段字串
const result="124ssabc33501fs"
現在我只想取裡面的數字。如何做到?

當然你肯定會想到這樣:

let r1=[...result].filter((item,index)=>!Number.isNAN(item)).join("") 

雖然只有一行,但是,還沒到最優雅。

如果使用正則表達式

console.log(result.match("/\d/g").join())

即可匹配到所有數字。

創建正則表達式的方式#

字面量創建#

let oo="lhw"
console.log(/w/.test(oo)) //檢測是否有w字符

但?如果我的 w 是個變量呢?

let oo="lhw"
const h="h"
console.log(eval(`/${h}/`.test(oo)))

對象創建#

let oo="luhw"
let a="h"
let a2="\\w" //匹配下劃線
let a3="\\d" //匹配數字
let reg=new RegExp("u","g") //匹配字串、全局
let reg2=new RegExp(a,"g") //接收變量比字面量方便
reg.test(oo)

小例子#

案例,當用戶輸入文字時將 div 裡對應的文字替換。

<div class="content">lhwwoc</div>
<script>
  let content=prompt("請輸入內容")
  let reg=new RegExp(content,"g")
  const element=doucument.qureySelector(".content")
 // let str=content.replace(/\w/,str=>{})
 element.innerHtml.replace(reg,str=>{
   return `<span style="color:red">
             ${str}
         </span>`
 })
</script>

選擇符#

類似於邏輯||

const str="newnewnwec"
console.log(/@|n/.test()) //true
console.log(/@|o/.test()) //false
console.log(/wne|n/.test()) //true

伏筆#

假設我要檢測一個電話號是北京或者是不是上海

/(010|020)\-\d{7,8}}/.test("010-12309721") //true

/(010|020)\-\d{7,8}}/.test("assd010-12309721") //false

我們發現開頭結尾並沒有限制。

接下來會說。

先解釋原子表的概念

let reg=/[123456]/
let age="18"
reg.test("1") //true
age.match(reg)  //返回[1] //僅匹配一個。

如果將【 】換成 ()
//

let reg=/(18|34|56)/
let age="18"
reg.test("1") //false
age.match(reg)  //返回["18","18",index:0]
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。