栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么带有全局标志的RegExp给出错误的结果?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么带有全局标志的RegExp给出错误的结果?

RegExp
对象跟踪
lastIndex
发生匹配的位置,因此在后续匹配中,它将从上次使用的索引开始,而不是从0开始。

var query = 'Foo B';var re = new RegExp(query, 'gi');var result = [];result.push(re.test('Foo Bar'));alert(re.lastIndex);result.push(re.test('Foo Bar'));

如果您不想

lastIndex
在每次测试后手动重置为0,只需删除该
g
标志即可。

这是规范规定的算法(第15.10.6.2节):

RegExp.prototype.exec(字符串)

对正则表达式执行字符串的正则表达式匹配,并返回包含匹配结果的Array对象;如果字符串不匹配,则返回null。在字符串ToString(string)中搜索正则表达式模式的出现,如下所示:

  1. 令S为ToString(string)的值。
  2. 令length为S的长度。
  3. 令lastIndex为lastIndex属性的值。
  4. 令我为ToInteger(lastIndex)的值。
  5. 如果全局属性为false,则让i = 0。
  6. 如果I <0或I> length,则将lastIndex设置为0并返回null。
    7.
    调用[[Match]],为其指定参数S和i。如果[[Match]]返回失败,请转到步骤8;否则,请转到步骤8。否则,使r为其State结果,然后转到步骤10。

  7. 令i = i + 1。
  8. 转到步骤6。
  9. 令e为r的endIndex值。
  10. 如果global属性为true,则将lastIndex设置为e。
  11. 令n为r的捕获数组的长度。(此值与15.10.2.1的NCapturingParens相同。)
  12. 返回具有以下属性的新数组:
    • index属性设置为匹配的字符串在完整字符串S中的位置。
    • 输入属性设置为S。
    • length属性设置为n + 1。
    • 将0属性设置为匹配的子字符串(即,偏移量i包括端和偏移量e排除之间的S部分)。
    • 对于使i> 0并且I≤n的每个整数i,将名为ToString(i)的属性设置为r的捕获数组的第i个元素。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/395228.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号