正則捕獲: 把乙個字串中和正則匹配的部分獲取到
[正則] :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...