gpt4 book ai didi

javascript - 正则表达式从文本中捕获 ID

转载 作者:行者123 更新时间:2023-11-28 20:35:24 25 4
gpt4 key购买 nike

我有以下正则表达式,我试图捕获每个开始评论的 ID。但由于某种原因我只能捕捉到第一个。它不会获取嵌套评论的 ID。它只将 1000 打印到控制台。我试图让它捕获 1000 和 2000。有人能发现我的正则表达式中的错误吗?

<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>

根据 Mike Samuel 的回答,我将 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;
});
}
}

最佳答案

<!--Start1000-->Text on<!--Start2000-->the left<!--End1000-->Text on the right<!--End2000-->

“1000”区域与“2000”区域重叠,但 exec 循环仅查找非重叠匹配项,因为每次调用 exec > 具有相同的正则表达式和字符串,从最后一个匹配的末尾开始。要解决这个问题,请尝试

var regex = /<!--Start([0-9]{4})-->([\s\S]*?)<!--End\1-->/g;
for (var s = $("#myHtml").html(), sWithoutComment;
// Keep going until we fail to replace a comment bracketed chunk
// with the chunk minus comments.
true;
s = sWithoutComment) {
// Replace one group of non-overlapping comment pairs.
sWithoutComment = s.replace(
regex,
function (_, id, content) {
console.log(id);
// Replace the whole thing with the body.
return content;
});
if (s === sWithoutComment) { break; }
}

关于javascript - 正则表达式从文本中捕获 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15511730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com