Javascript RegExp用全局修饰器产生不寻常的结果
Javascript RegExp Producing Unusual Results with Global Modifer
我能够解决这个问题,因为事实证明我不需要/g。但我想知道是否有人能解释为什么会发生以下行为。
x = RegExp( "w", "gi" )
x.test( "Women" )
= true
x.test( "Women" )
= false
在对表达式求值时将继续在true和false之间交替。这是一个问题,因为我在字符串列表上使用相同的编译RegExp,导致一些在应该为真时评估为假。
您不应该在用于test
的正则表达式中使用全局修饰符,因为它保留上次搜索的索引,并从那里开始下一个测试。
我也问过同样的问题。
当您使用g
标志时,regex将在其lastIndex
属性中存储匹配的结束位置。下次调用test()
、exec()
或match()
中的任何一个时,regex将从字符串中的索引开始尝试查找匹配项。
当没有找到匹配时,它将返回null,并将lastIndex
重置为0。这就是为什么你的测试总是交替进行。它将匹配W
,然后lastIndex
将被设置为1。下次调用它时,将返回null,并重置lastIndex
。
lastIndex
将不会改变,如果您获得所有匹配,则会出现无限循环。在这种情况下,您应该手动调整lastIndex
,如果它匹配空字符串
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/RegExp/test
本质上,与exec(或与exec结合使用)一样,在同一个全局正则表达式实例上多次调用test将超越前一个匹配。
RegExp
对象x
在内部跟踪它的最后一次匹配。当您再次调用.test
时,它将尝试从"w"
之后开始匹配。当然,这只适用于regex对象实例。
> /w/gi.test('Women')
true
> /w/gi.test('Women')
true
相关文章:
- 当查询不在displayField中时,引导Ajax Typeahead不显示结果
- Moment.js不显示结果
- Javascript 函数不返回结果
- jquery jqgrid 不显示结果,具体取决于 JSON 对象中的参数
- 自动完成 JQuery 不显示结果
- 显示数学运算语法而不是结果
- 返回不一致结果的日期(取决于是否存在前导零)
- JavaScript 异步循环不返回结果
- jQuery $.post() 函数难以不显示结果
- 为什么 document.write 不显示结果
- 主干.js如何处理不返回结果的 GET 请求
- 按活动排序,但不在结果中显示活动
- JavaScript 变量范围不期望结果
- 主干提取不返回结果
- JSON 不显示结果
- JavaScript:在不影响结果准确性的情况下舍入数字
- D3 合唱团中不寻常的黑色形状
- 用于计算费用的脚本不显示结果
- Javascript RegExp用全局修饰器产生不寻常的结果
- 重复输出不寻常的结果