特定对的正则表达式或对中的每个项目

Jam*_*ett 3 regex actionscript-3

我有一种情况,我可能会得到一对或两个角色,我想要匹配.

例如:

str = 'cddd a dfsdf b sdfg ab uyeroi'
Run Code Online (Sandbox Code Playgroud)

我想匹配任何"a"或"b"或"ab".如果"ab"聚集在一起,我想把它作为单个匹配(而不是两个匹配"a""b").如果我得到"ab",它将始终按顺序排列("a"将始终位于"b"之前)

我有的是:

/[ab]|ab/
Run Code Online (Sandbox Code Playgroud)

但我不确定这ab是否会比一个更强大的比赛期限[ab].

谢谢你的帮助.

Mar*_*ers 6

您当前的表达式将无法在大多数流行的正则表达式引擎中执行您想要的操作 - 它将匹配ab.行为取决于正则表达式引擎实现:

您可以轻松找出您打算使用的正则表达式风格是否具有文本定向或正则表达式引擎.如果可以使用反向引用和/或延迟量词,则可以确定引擎是正则引导的.您可以通过将正则表达式regex|regex not应用于字符串来进行测试regex not.如果仅产生匹配regex,则引擎是正则引导的.如果结果是regex not,那么它是文本导向的.这背后的原因是正则表达式引擎是"急切的".

如果您正在使用正则表达式引导的引擎然后修复它,您可以颠倒交替中的术语顺序,以确保它ab首先尝试匹配:

/ab|[ab]/
Run Code Online (Sandbox Code Playgroud)

或者您可以重写表达式,以便顺序无关紧要:

/ab?|b/
Run Code Online (Sandbox Code Playgroud)

  • @James Fassett:嗯,它可能取决于你正在使用的特定正则表达式引擎,但我所见过的所有那些在交替中从左到右匹配.这里有一些关于这种行为的讨论:http://www.regular-expressions.info/alternation.html(参见关于渴望的部分). (2认同)