JavaScript中带有全局标记

时间:2017-06-08 09:00:47

标签: javascript

似乎RegExp内在属性是有状态的。

因此,当提供全局标记g时,在同一字符串上调用它两次会产生不同的结果,因为它会沿字符串前进搜索。

所以:



var r = /(\d{3})/g;
    
console.log(r.test('123')); // true
console.log(r.test('123')); // false - because the search has moved past the first match




但是如果我添加一个中间测试,我会得到以下结果:



var r = /(\d{3})/g;
    
console.log(r.test('123')); // true
console.log(r.test('456')); // true
console.log(r.test('123')); // true!




那么说RegExp个实例的运作原则只考虑最后一个被评估的字符串是正确的吗?如果字符串与上一个字符串不同,它会被有效地重置吗?

1 个答案:

答案 0 :(得分:3)

  

那么说RegExp实例的运行原则只考虑最后一个被评估的字符串是否正确?

  

如果字符串与上一个字符串不同,它会被有效重置吗?

正确

  

如果省略全局标志,是否在测试之间重置正则表达式?

查看RegExp#lastIndex