鍍金池/ 問答/Java  HTML/ js 正則表達(dá)式 g 參數(shù)的一個小問題

js 正則表達(dá)式 g 參數(shù)的一個小問題

clipboard.png

如上圖所示:第一種寫法下面對 '$3.23' 識別為 false,但第二種,僅僅是去掉了一個參數(shù) g,卻通過了,沒想明白。按理第一種也應(yīng)該是通過的,請大家指導(dǎo)指導(dǎo)!

回答
編輯回答
獨白

test重復(fù)使用,如果用了g,也下一次匹配會從上一次匹配的內(nèi)容的下一個index為起點,所以第二次使用test起點應(yīng)該是.32,所以就成了false。
下面有提到:
https://segmentfault.com/a/11...

2017年3月30日 00:26
編輯回答
菊外人
// 舉個例子
var reg = /\w+/g;
reg.test('ab'); // true
console.log(reg.lastIndex); // 2
// 再執(zhí)行一遍就是false了。
reg.test('ab'); // false
console.log(reg.lastIndex); // 0
// 再執(zhí)行一遍就是true了。
reg.test('ab'); // true
console.log(reg.lastIndex); // 2
// 再執(zhí)行一遍又是false了,如此反復(fù),所以用g標(biāo)識后,看起來很詭異。因為每次匹配開始位置變了。
reg.test('ab'); // false

// MDN 正則這塊有這個知識點。不過現(xiàn)在好像打不開了...

7.2.4. 修飾符 g,對 exextest 的影響
正則實例的 lastIndex 屬性,表示嘗試匹配時,從字符串的 lastIndex 位開始去匹配。
字符串的四個方法,每次匹配時,都是從 0 開始的,即 lastIndex 屬性始終不變。
而正則實例的兩個方法 exec、test,當(dāng)正則是全局匹配時,每一次匹配完成后,都會修改 lastIndex。

上面這段話摘抄自:《JavaScript 正則表達(dá)式迷你書》,推薦。

2018年1月30日 23:52