javascript - 正则表达式模式匹配顺序

标签 javascript python regex

在我熟悉的所有语言的正则表达式引擎中,.* 符号表示匹配零个或多个字符。考虑以下 Javascript 代码:

var s = "baaabcccb";
var pattern = new RegExp("b.*b");
var match = pattern.exec(s);
if (match) alert(match);

这输出 baaabcccb

同样的事情发生在 Python 上:

>>> import re
>>> s = "baaabcccb"
>>> m = re.search("b.*b", s)
>>> m.group(0)
'baaabcccb'

这两种语言匹配 "baaabcccb" 而不是简单地匹配 "baaab" 的原因是什么?我读取模式 b.*b 的方式是“找到一个以 b 开头,然后有任意数量的其他字符,然后以 结尾的子字符串b。” baaabbaaabcccb 都满足这个要求,而 Javascript 和 Python 都符合后者。我原以为它会匹配 baaab,只是因为该子字符串满足要求 并且 先出现。

那么为什么在这种情况下模式匹配 baaabcccb 呢?而且,是否有任何方法可以修改此行为(使用任何一种语言),使其与 baaab 相匹配?

最佳答案

您可以通过在 * 之后添加 ? 来使正则表达式不贪婪,如下所示:b.*?b。然后它将匹配可能的最小字符串。默认情况下,正则表达式是贪婪的,会尝试找到最长的匹配项。

关于javascript - 正则表达式模式匹配顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11026322/

相关文章:

javascript - Angular 2选择不绑定(bind)

javascript - 模型更改时 AngularJS 不会更新 img src

java - 在 python 中为图片生成 md5 和,然后在 Android 应用程序中验证

python - 'float' 对象没有属性 '__getitem__' Python 错误

python - 如何检测装饰器是否已应用于方法或函数?

python - 使用正则表达式从 %%timeit 中提取测量值

JavaScript 在 HTML 中保持图像变化

regex - 为什么列表上下文中的替换不返回捕获列表?

ruby - 在 Ruby 正则表达式中使用 ^ 字符向后看

javascript - p5 随着鼠标移动显示div