为什么这个javascript字符串匹配调用只返回一个结果?

时间:2014-12-31 22:35:38

标签: javascript regex match

下面的代码应该返回5个匹配,但它只返回一个。

    var str = '"<div id="rxAntMER" class="LEDPill" data-hookableby="globalid" data-oncolor="green" data-offcolor="maroon" data-paramname="rxAntMER" data-index="9" data-blockindex="0"></div>
<div id="rxAntMER" class="LEDPill" data-hookableby="globalid" data-oncolor="green" data-offcolor="maroon" data-paramname="rxAntMER" data-index="8" data-blockindex="0"></div><div id="rxAntMER" class="LEDPill" data-hookableby="globalid" data-oncolor="green" data-offcolor="maroon" data-paramname="rxAntMER" data-index="7" data-blockindex="0"></div>
<div id="rxAntMER" class="LEDPill" data-hookableby="globalid" data-oncolor="green" data-offcolor="maroon" data-paramname="rxAntMER" data-index="6" data-blockindex="0"></div><div id="rxAntMER" class="LEDPill" data-hookableby="globalid" data-oncolor="yellow" data-offcolor="maroon" data-paramname="rxAntMER" data-index="5" data-blockindex="0"></div>
<div id="rxAntMER" class="LEDPill" data-hookableby="globalid" data-oncolor="yellow" data-offcolor="maroon"';
       var results  = str.match(/id="rxAntMER".+data-blockindex="0"/g);
       alert("Number of matches = " + results.length);

正则表达式试图完成以下任务:

  1. 匹配文字'id =“rxAntMER”'

  2. 后跟1个或多个“任何字符”

  3. 直到匹配文字'data-blockindex =“0”'

  4. 提供的文字中有5个这样的匹配。我已经尝试了使用RegEx(...)和string.Match(...)的示例,教程和许多排列,但我无法得到我正在寻找的结果。

    关于我做错了什么的任何建议或想法?

1 个答案:

答案 0 :(得分:5)

+贪婪。作为一个简化示例,假设您想要找到<1><2>中有多少个角括号对。您使用正则表达式<.+>进行搜索,期望它与两者匹配。但是等一下,.+匹配1><2,所以你有一场比赛。

你需要减少+贪心。通过使用?进行操作即可实现,因此您拥有.+?