js 正则表达式 g 参数的一个小问题

新手上路,请多包涵

clipboard.png

如上图所示:第一种写法下面对 '$3.23' 识别为 false,但第二种,仅仅是去掉了一个参数 g,却通过了,没想明白。按理第一种也应该是通过的,请大家指导指导!

阅读 2.1k
2 个回答
// 举个例子
var reg = /\w+/g;
reg.test('ab'); // true
console.log(reg.lastIndex); // 2
// 再执行一遍就是false了。
reg.test('ab'); // false
console.log(reg.lastIndex); // 0
// 再执行一遍就是true了。
reg.test('ab'); // true
console.log(reg.lastIndex); // 2
// 再执行一遍又是false了,如此反复,所以用g标识后,看起来很诡异。因为每次匹配开始位置变了。
reg.test('ab'); // false

// MDN 正则这块有这个知识点。不过现在好像打不开了...

7.2.4. 修饰符 g,对 exextest 的影响
正则实例的 lastIndex 属性,表示尝试匹配时,从字符串的 lastIndex 位开始去匹配。
字符串的四个方法,每次匹配时,都是从 0 开始的,即 lastIndex 属性始终不变。
而正则实例的两个方法 exectest,当正则是全局匹配时,每一次匹配完成后,都会修改 lastIndex

上面这段话摘抄自:《JavaScript 正则表达式迷你书》,推荐。

test重复使用,如果用了g,也下一次匹配会从上一次匹配的内容的下一个index为起点,所以第二次使用test起点应该是.32,所以就成了false。
下面有提到:
https://segmentfault.com/a/11...

推荐问题
宣传栏