【问题标题】:What does the d flag mean in a javascript RegEx?d 标志在 javascript RegEx 中的含义是什么?
【发布时间】:2011-05-23 20:21:16
【问题描述】:

我有一个正则表达式,它似乎在 Safari 和 Chrome 中工作,在 FireFox 中出现以下错误。

Error: invalid regular expression flag d
Source File: http://java.net/projects/mq
Line: 194, Column: 34
Source Code:
    var vbkpatt1=/projects\/[^/]+/di; 

几周前我曾使用过这个 RegEx 并将其放在一边,所以我没有指向导致我使用“d”标志的页面的链接。指向包含 d 标志的 ref 的指针将是解决我的问题的良好开端。

【问题讨论】:

标签: javascript regex


【解决方案1】:

没有d 标志,这是你的问题:) 有:

  • g - 全局搜索(多个匹配项)
  • i - 忽略大小写
  • m - 多输入

【讨论】:

  • developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… --- "如果匹配成功,则 exec() 方法返回一个数组(带有额外的属性 index,输入,如果设置了 d 标志,则为索引;见下文)。 ……”。在页面底部,它显示了所有浏览器(甚至 IE)和 nodejs 支持。但是 - 在 nodejs 中使用 'd' 标志会引发错误。如果没有 'd' 标志,您可以获得匹配中任意组的文本(和长度,这是冗余信息),但不能获得组的起始索引。
  • This answer 有关于“目前处于第 3 阶段”的提案的信息,这意味着它将最终成为 JS 的一部分,也将提供索引。我的猜测是“d”标志是过早包含在文档中的,但也许我的猜测是错误的。
【解决方案2】:

Webkit 浏览器在这种情况下更宽容,并且会接受这样的事情:

/theregex/zxcvbgi

他们没有抛出错误,而是将其视为:

/theregex/gi

然而,Firefox 将反对任何无效标志。尼克在他的回答中指出了有效的。

【讨论】:

    【解决方案3】:

    你确定它确实在 Chrome 中一些事情吗?我试过了:

    /projects\/[^/]+/zyx
    

    它接受/projects\/[^/]+/,但我强烈怀疑这些都是真正的扩展。它只是无视他们。正如 Ken 所说,即使存在无效标志,它也会保留有效标志。

    另外,我建议您关注good tutorial,而不仅仅是剪切和粘贴。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-04
      • 2020-06-18
      • 2011-10-15
      • 1970-01-01
      • 2012-05-07
      • 2016-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多