我有以下正则表达式,我试图捕获每个开始评论的ID。但由于某种原因,我只能捕获第一个。它不会获取嵌套注释的Id。它只打印1000到控制台。我试图让它捕获1000和2000.任何人都可以在我的正则表达式中发现错误?正则表达式从文本中捕获ID
<script type="text/javascript">
function ExtractText() {
var regex = /\<!--Start([0-9]{4})-->([\s\S]*?)<!--End[0-9]{4}-->/gm;
var match;
while (match = regex.exec($("#myHtml").html())) {
console.log(match[1]);
}
}
</script>
<div id="myHtml">
<!--Start1000-->Text on<!--Start2000-->the left<!--End1000-->Text on the right<!--End2000-->
</div>
基于迈克·塞缪尔的回答我我的JS更新以下内容:
function GetAllIds() {
var regex = /<!--Start([0-9]{4})-->([\s\S]*?)<!--End\1-->/g;
var text = $("#myHtml").html();
var match;
while (regex.test(text)) {
text = text.replace(
regex,
function (_, id, content) {
console.log(id);
return content;
});
}
}
+1我不相信它,直到我尝试了我自己,但它的作品。 – 2013-03-19 22:42:10
@ p.s.w.g,是的。替代品功能的副作用有点令人讨厌,但只有几种方法可以获得重叠匹配 - 反复匹配并移除旧匹配;尝试将所有后缀与锚定在'^'处的正则表达式匹配;或者用一个结束锚('$')正则表达式来尝试所有的前缀。 – 2013-03-19 22:46:41
嗯..它似乎打印1000两次而不是1000和2000.它虽然接近!我认为在结尾 – TGH 2013-03-19 22:52:33