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]