reg.exec()
reg.lastIndex代表使用reg.exec()方法,當前的索引位置
- reg.exec與str.match類似藕畔,但不同的是马僻,使用g全局匹配時,exec每次只會匹配出一個結(jié)果注服,每次執(zhí)行exec會移動index韭邓,下次匹配時從lastIndex的位置開始
- 執(zhí)行的結(jié)果為類數(shù)組,其中包含index屬性
var reg = /ab/g
var str = "ababab"
console.log(reg.lastIndex) //0
reg.exec(str) // ["ab", index: 0]
reg.exec(str) // ["ab", index: 2]
reg.exec(str) // ["ab", index: 4]
// 匹配結(jié)果為null時溶弟,則會從0開始重新匹配
- lastIndex為可寫屬性女淑,通過手動調(diào)整lastIndex,可以控制reg.exec()的執(zhí)行位置
var reg = /test/g
var str = "testtest"
reg.lastIndex = 4
reg.exec(str) // ["test", index: 4]
reg.lastIndex = 5
reg.exec(str) // null
- 下面這種情況要注意辜御,如果reg根據(jù)lastIndex未直接匹配出結(jié)果鸭你,index則自動向后移,直到匹配出來為止,并且index為匹配出結(jié)果的起始位
var reg = /test/g
var str = "testtest"
reg.lastIndex = 1
reg.exec(str) // ["test", index: 4]
- 子表達式 正則表達式里的()部分為子表達式袱巨,如果reg中存在子表達式阁谆,reg.exec()的執(zhí)行結(jié)果中第二位為子表達式
var reg = /(\w)\1(\w)\2/g
var str = "aabbccddeeff"
reg.exec(str) // ["aabb", "a", "b", index: 0] 其中a和b為子表達式
reg.exec(str) // ["ccdd", "c", "d", index: 4] 其中a和b為子表達式
str.replace()
- str.replace(a, b)將str中的a換成b,默認只換其中的一個
- str.replace是生成一個新的字符串愉老,原字符串不會變化
- a可以換成正則场绿,如果使用了g則為全局匹配,相當于replaceAll
var str = "abca"
var reg = /a/g
str.replace(reg, 'd') // dbcd
// 將xy換成xxyy
var reg = /(\w)(\w)/g
var str = "ab"
str.replace(reg, "$1$1$2$2") // aabb 通過$1拿到第一個子表達式a嫉入,通過$2拿到第二個子表達式
// 將xxyy換成yyxx
var str = "aabbbbcc" // 換完后的結(jié)果為bbaaccbb
var reg = /(\w){1,2}(\w){1,2}/g
// 或者 reg = /(\w)\1(\w)\2/g
str.replace(reg, "$2$2$1$1") // bbaaccbb
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者