在javascript

时间:2016-05-27 15:37:50

标签: javascript regex

我有一个匹配html代码中所有链接的正则表达式,但我想只匹配那些在其文本或其任何属性中具有特定模式的链接。实际上,我想只匹配那些具有模式${whatever_text}的链接。

我将举一个澄清事情的例子:



var text = '<a href="/foo">foo</a> some sample text <a href="${bar}">bar</a>';
var pattern = /<a (.+?)<\/a>/igm;
var matches = text.match(pattern);
document.write(matches);
&#13;
&#13;
&#13;

以前的正则表达式匹配文本中的两个链接,但我需要构建一个仅匹配最后一个链接的正则表达式。我已尝试使用以下正则表达式/<a (.*?\$\{.+?\}.*?)<\/a>/igm但它匹配第一个链接的开始标记和第二个链接的结束标记之间的所有内容。

&#13;
&#13;
var text = '<a href="/foo">foo</a> some sample text <a href="${bar}">bar</a>';
var pattern = /<a (.*?\$\{.+?\}.*?)<\/a>/igm;
var matches = text.match(pattern);
document.write(matches);
&#13;
&#13;
&#13;

事先谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用此负前瞻性正则表达式:

$ stack build

FAQ

/<a (?:(?!<a[^>]*>).)*?\$\{[^}]+\}.*?<\/a>/ 是一种消极的预测,以确保我们在匹配时粘贴(?:(?!<a[^>]*>).)*?时与另一个<a..>不匹配。