下面的代码应该返回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);
正则表达式试图完成以下任务:
匹配文字'id =“rxAntMER”'
后跟1个或多个“任何字符”
直到匹配文字'data-blockindex =“0”'
提供的文字中有5个这样的匹配。我已经尝试了使用RegEx(...)和string.Match(...)的示例,教程和许多排列,但我无法得到我正在寻找的结果。
关于我做错了什么的任何建议或想法?
答案 0 :(得分:5)
+
贪婪。作为一个简化示例,假设您想要找到<1><2>
中有多少个角括号对。您使用正则表达式<.+>
进行搜索,期望它与两者匹配。但是等一下,.+
匹配1><2
,所以你有一场比赛。
你需要减少+
贪心。通过使用?
进行操作即可实现,因此您拥有.+?
。