(?| ..)
以上语法在 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/