正則的捕獲

2022-05-17 20:31:45 字數 2214 閱讀 3672

正則的捕獲:exec,返回的結果是陣列或null

先看個demo

var reg = /\d+/

var str = "hua123hua456";

var result =reg.exec(str);

console.dir(result)

//["123", index: 3, input: "hua123hua456"]

console.log(reg.lastindex) //

0console.log(result.input) //

原字串str

console.log(result.index) //

匹配到字串的初始index,這裡是2

如果你第一次用exec,估計你是猜不到答案的

捕獲的結果是乙個陣列,因為有符合正則的字串,但是只有乙個,而且還是123,不是1,或者12之類的.

這裡涉及到捕獲的兩個特點:貪婪性和懶惰性.

所謂的貪婪性:每次匹配按照匹配最長的結果捕獲的,也就是若1符合正則,12也符合正則,那麼將捕獲12

所謂的懶惰性:每次執行exec只捕獲第乙個匹配的內容,在不進行任何處理的情況下,捕獲的始終是第乙個匹配的內容,且正則的lastindex還是預設的0.

顯然真要用的話,這樣的缺點很麻煩,所以要克服.

1.克服懶惰性

之前說了乙個修飾符,g,恩,這裡可以用來解決懶惰性.

加了g之後:正則每一次捕獲之後lastindex的值變成最新的值 下一次捕獲從最新的位置開始查詢,這樣就可以把所有需要捕獲的內容都獲取到

看個demo

var reg = /\d+/g;

var str = "h123u456";

console.log(reg.lastindex); //0

console.log(reg.exec(str)); //

["123", index: 1, input: "h123u456"]

console.log(reg.lastindex); //

4 console.log(reg.exec(str)); //

["456", index: 5, input: "h123u456"]

console.log(reg.lastindex); //

8 console.log(reg.exec(str)); //

null

console.log(reg.lastindex); //

0 console.log(reg.exec(str)); //

["123", index: 1, input: "h123u456"]

console.log(reg.lastindex); //

4 console.log(reg.exec(str)); //

["456", index: 5, input: "h123u456"]

console.log(reg.lastindex); //

8 console.log(reg.exec(str)); //

null

每次捕獲到字串之後,lastindex會從下乙個字串的位置開始,匹配的結果直到null才算結束,後面會一直重複,所以為了得到所有的字串,可以寫個迴圈

function

findstr (reg,str)

return

arr;

}findstr (/\d+/g,"hua123hua456"); //

["123","456"]

不過其實一般是不用findstr這個方法的,因為字串物件本身有個match的方法

"123uu556kk90".match(/\d+/g); //

["123","556","90"]別忘了加g,不然只匹配一次,懶惰性

2.克服貪婪性

在量詞元字元後面加?即可.

?在正則中的作用:

a. 放在普通的元字元後面表示出現0-1次

b.放在量詞元字元後面是取消捕獲時候的貪婪性

舉個栗子

var regg = /\d+?/g;

findstr (regg,str);

//["1","2","3","4","5","6"]

回憶下量詞元字元:*,+,?,

總結下:

解決懶惰性,g

解決貪婪性,?

正則的捕獲

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

正則捕獲的複習

var reg zhu d g var str zhu1234zhu3456zhu5678 我們用exec執行三次,每一次不僅僅把大正則匹配的獲取到,而且還可以獲取第乙個分組匹配的內容 console.log reg.exec str zhu1234 1234 console.log reg.exe...

Grok 正則捕獲

grok 正則捕獲 s d d s 回顧下 pattern 匹 配 pattern 但不獲取匹配結果,也就是說這是乙個非獲取匹配,不進行儲存供以後使用。這在使用 或 字元 來組合乙個模式的各個部分是很有用。例如,industr y ies 就是乙個比 industry industries 更簡略的...