【问题标题】:Match a string pattern multiple times in the same line在同一行中多次匹配字符串模式
【发布时间】:2015-01-24 23:21:32
【问题描述】:

我想在一个字符串中找到一个特定的模式。

图案:(\{\$.+\$\})
匹配示例:{$ test $}

我遇到的问题是文本在同一行上有 2 个匹配项。它返回一个匹配项。示例:this is a {$ test $} content {$ another test $}

这会返回 1 个匹配项:{$ test $} content {$ another test $}

它应该返回 2 个匹配项: {$ test $}{$ another test $}

注意:我使用的是 Javascript

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    问题是当您使用 .+ 时,您的正则表达式 (\{\$.+\$\}) 本质上是贪婪的,这就是它匹配 {$}$ 之间最长匹配的原因。

    要解决这个问题,让你的正则表达式不贪婪:

    (\{\$.+?\$\})
    

    或者甚至更好地使用否定正则表达式:

    (\{\$[^$]+\$\})
    

    RegEx Demo

    【讨论】:

    • 太棒了!谢谢,一旦批准计时器完成,我会接受这个答案。
    【解决方案2】:

    使用global match flag。 此外,使用负前瞻将确保您不会错过任何匹配项或没有命中任何错误匹配项。

    var s = "this is a {$ test $} content {$ another test $}";
    var reg = /\{\$.*?(?!\{\$.*\$\}).*?\$\}/g;
    console.log(s.match(reg));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-28
      • 1970-01-01
      • 2011-06-21
      相关资源
      最近更新 更多