javascript - 使用可选组获取最短匹配的问题

标签 javascript regex vba vbscript non-greedy

我想在 (this is)?.??.??(an)?.??.??(example sentence) 正则表达式中的每个组之间允许任何 0 到 2 个字符.它应该匹配以下字符串中的粗体文本:

blah blah. An example sentence
blah blah. This is an example sentence
Something something Example sentence

现在,在第一个示例中,匹配项是 ah。例句。我想在“。”前加上2个问号。意味着正则表达式引擎更愿意匹配 0 个字符。

我在 MS Word 的 VBA 中使用正则表达式,由 CreateObject("vbscript.regexp") 实现,据我所知,它使用了 VBScript 正则表达式风格,据我所知,它是与 JavaScript 风格相同。

最佳答案

When searching 0020002101 should 2.??.??.??101 not prefer 2101 to 20002101?

Regex 引擎不能“偏好”任何东西。它从左到右匹配。一旦找到 2(第一个 2),它就会开始匹配后续的子模式,并在找到匹配项时将其返回。

在您的情况下,您需要在可选组中使用 .{0,2}

(this is.{0,2})?(an.{0,2})?(example sentence)
        ^^^^^^     ^^^^^^

参见 regex demo .

如果可选字符串的顺序很重要,请将它们嵌套:

(this is.{0,2}(an.{0,2})?)?(example sentence)

参见 another regex demo .此正则表达式将仅匹配 an 后有 0 到 2 个字符,前提是 this is 在它之前找到 0 到 2 个字符。

关于javascript - 使用可选组获取最短匹配的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41696380/

相关文章:

javascript - 为什么会有 for(;;); Facebook JSON 响应中的序言?

javascript - 寻找正则表达式来从字符串中删除文本

regex - 使用 Perl 匹配一些行并删除它们

json - 将 JSON 日期转换为 MM/DD/YYYY 格式?

vba - Excel年周组合计算

php - 使用 JavaScript 动态添加字段会使字段消失

javascript - 为什么这个 setInterval 代码不起作用?

regex - 使用 xPath 还是正则表达式?

javascript - 文件名的正则表达式字符串模式

vba - 删除图表系列但保留其格式