下面的代码应该返回 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. 后跟一个或多个任何字符

  3. 直到匹配文字 ' 的数据 blockindex ="0"

有 5 这种匹配项中提供的文本。我试了样本、 教程和许多排列使用 RegEx(...) 和字符串。Match(...),但我无法得到我要查找的结果。

任何建议或对我所做的想法不正确?

2014-12-31 00:00:00
问题评论:

ids 必须是唯一的。无法解析 HTML 与正则表达式.

将转换为非贪婪、 更改此部分中的正则表达式.+?[Ss]+?

@Oriol,当 id 不是唯一的只是必须确保进行"独特"的组合,使 id 加上另一个元素中的属性。上文提到的文本是不报废的 HTML,它是一个中间的步骤,以创建正确的 HTML (太长,无法解释) 个人而言。我们只是要指出这不是典型方案中肆虐,但创建需要几个步骤...

回答:

+是贪婪的。作为一个简化示例,假设您想要找到多少的尖括号对<1><2>中了。用正则表达式搜索<.+>,希望同时匹配。但等待, .+1><2,因此有一个匹配项。

您需要进行+更少的贪婪。为此,因此您必须使用一个?,后面.+?.

很抱歉为长而无法接受,节日得到的方式。有关的 greediness 的一个问题"+",为什么添加 sdata blockindex ="0"继续"任意字符"不停止我原始模式中"+"?

@fuzzlog︰ 由于其被贪婪的本质,它不会停止的方式。您可以将正则表达式作为同时尝试这两种可能性︰ 继续+,或尝试匹配后+的一部分。即使在第二个可能性成功,仍然它在尝试 (扩展+) 第一种可能性,并且将最终那个将会成功。再有几个可能的有效匹配可供选择,和+是贪婪的因为它选择一个具有最长的匹配。

请输入您的翻译

Why is this javascript string match call return only one result?

确认取消