關於正則捕獲和正則的懶惰性

2021-09-26 10:13:20 字數 1149 閱讀 9942

正則捕獲: 把乙個字串中和正則匹配的部分獲取到

[正則] :exec  test

[字串] :replace       split            match

基於exec可以實現正則的捕獲

1.如果當前正則和字串不匹配,捕獲的結果是null

2.如果是匹配 捕獲的結果是乙個陣列

0:大正則捕獲的內容

index 正則捕獲的起始索引

input 原始操作的字串

3. 執行一次exec 只能捕獲到第乙個正則匹配的內容,其餘匹配的內容還沒有捕獲到,而且多次執行,並沒有什麼軟用。

正則的捕獲有懶惰性: 只能捕獲到第乙個匹配的內容,剩餘的預設捕獲不到 只有所以懶是因為 lastindex 每次都從0開始

解決正則捕獲的懶惰性,我們需要加全域性修飾符g。

let  str ='xian2019zuizhongguo2020'

let reg = /\d+/;

console.log(reg.exec(str))

str.match(reg)//正則不加g 返回第乙個匹配的即可,加了g捕獲所有匹配的內容,最後統一儲存到乙個陣列中返回。

//當然也存在一定侷限性。match 再正則設定了g的情況下 基於match的內容只有大正則匹配的,小分組的內容沒有單獨抽取出來(不設定g的情況下和執行exec一樣)

regexp.prototype.myexecall = function (str)

let result = ,

valary = this.exec(str);

while (valary)

return result;

}

正則捕獲具備貪婪性:每次匹配捕獲的時候,總是捕獲到和正則匹配中,每次捕獲的都是最長的內容 把問號?放到量詞元字元後面,代表的就不是出現零次或者一次了,而是取消捕獲的貪婪性。

? 在正則中的作用

1.量詞元字元:出現零次或者一次                       /-?/讓減號出現一次或者不出現

2. 取消貪婪性:    /\d+?/ 捕獲的時候只捕捉最短匹配的內容

3.   ?:只匹配不捕獲

4.   ?= 正向預查

5     >!負向預查

正則的捕獲

正則的捕獲 exec,返回的結果是陣列或null 先看個demo var reg d var str hua123hua456 var result reg.exec str console.dir result 123 index 3,input hua123hua456 console.log ...

正則的捕獲

正則的捕獲 exec,返回的結果是陣列或null 先看個demo var reg d var str hua123hua456 var result reg.exec str console.dir result 123 index 3,input hua123hua456 console.log ...

正則表達中貪婪性與懶惰性表示式

string original first line n rsecond line string str regex.replace original,regexoptions.multiline string test this is a first test 貪婪表示式 不用回溯,所以會快 re...