javascript - JavaScript 中的替代捕获组编号

标签 javascript regex

(?| ..)

以上语法在 Perl 中可用。我在 JavaScript 中尝试过同样的方法,但它对我不起作用。

谁能建议我如何在 JavaScript 中使用它?

我正在尝试将以下正则表达式转换为在 JavaScript 中使用:

(?|\s+1+\s+([\d]+)\s+((?:\w+)(?:[\.]ms[\.]com)?)[\S\s]*?\s+1+\s+([\d]+)\s+((?:\w+)(?:[\.]ms[\.]com)?)[\S\s]*?\s+1+\s+([\d]+)\s+((?:\w+)(?:[\.]ms[\.]com)?)|\s+1+\s+([\d]+)\s+((?:\w+)(?:[\.]ms[\.]com)?)[\S\s]*?\s+1+\s+([\d]+)\s+((?:\w+)(?:[\.]ms[\.]com)?)|\s+1+\s+([\d]+)\s+((?:\w+)(?:[\.]ms[\.]com)?))

最佳答案

并非所有带有分支重置的正则表达式都具有不带分支重置的等效版本。但是,您可以轻松重写您案例中的正则表达式,以避免使用分支重置功能。<​​/p>

让我们看看您的正则表达式:

(?|
  \s+1+\s+([\d]+)\s+((?:\w+)(?:[\.]ms[\.]com)?)[\S\s]*?\s+1+\s+([\d]+)\s+((?:\w+)(?:[\.]ms[\.]com)?)[\S\s]*?\s+1+\s+([\d]+)\s+((?:\w+)(?:[\.]ms[\.]com)?)|
  \s+1+\s+([\d]+)\s+((?:\w+)(?:[\.]ms[\.]com)?)[\S\s]*?\s+1+\s+([\d]+)\s+((?:\w+)(?:[\.]ms[\.]com)?)|
  \s+1+\s+([\d]+)\s+((?:\w+)(?:[\.]ms[\.]com)?)
)

由于下一个替代项本质上是前一个替代项的前缀直至语法,您可以通过将尾部设为可选来合并这两个分支。

让我们看一下您的正则表达式的简化 View :

(?|
  ABC|
  AB|
  C
)

可以在不重置分支的情况下重写正则表达式:

A(?:B(?:C)?)?

重写的正则表达式不会牺牲原始正则表达式的任何功能。您甚至可以使用此正则表达式替换您当前在 PCRE 中使用的正则表达式。

\s+1+\s+([\d]+)\s+((?:\w+)(?:[\.]ms[\.]com)?)(?:[\S\s]*?\s+1+\s+([\d]+)\s+((?:\w+)(?:[\.]ms[\.]com)?)(?:[\S\s]*?\s+1+\s+([\d]+)\s+((?:\w+)(?:[\.]ms[\.]com)?))?)?

关于javascript - JavaScript 中的替代捕获组编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26674069/

相关文章:

javascript - 为什么 Grunt 在丑化时忽略 jQuery?

javascript - 如何使用ajax将检索到的数据分配给不同的td

python - 正则表达式匹配键,除了一个

Javascript 正则表达式替换 URL 中的获取参数

java - 重复属性正则表达式简化

javascript - 背景过渡完成后淡入的文本

javascript 'deviceorientation' 事件 - 它测量什么传感器?

javascript - 滚动功能无限滚动;使页脚无法访问

Java 的模式匹配器表示未找到匹配项,但匹配项已打印到控制台

php - 大写空格,点,逗号后的每个单词