我有一个字符串,其中重复相同长度的主模式(aa1111bbb2222ccccc)可能或可能后面跟任何长度的文本(*),像这样:
aa1111bbb2222ccccc********aa1111bbb2222ccccc****************
aa1111bbb2222cccccaa1111bbb2222ccccc****aa1111bbb2222ccccc
我需要将子字符串匹配为以相同长度的主模式开头并包含尾随文本(如果有)的模式。
我将像这样包装匹配的子串模式(使用上面的字符串):
<div class="substring-pattern">
<div class="title">aa1111bbb2222ccccc</div>
<div class="comment">********</div>
</div>
<div class="substring-pattern">
<div class="title">aa1111bbb2222ccccc</div>
<div class="comment">****************</div>
</div>
<div class="substring-pattern">
<div class="title">aa1111bbb2222ccccc</div>
<div class="comment"></div>
</div>
<div class="substring-pattern">
<div class="title">aa1111bbb2222ccccc</div>
<div class="comment">****</div>
</div>
<div class="substring-pattern">
<div class="title">aa1111bbb2222ccccc</div>
<div class="comment"></div>
</div>
帮助表示感谢。我坚持使用子串模式匹配脚本,忽略了html包装的东西。
答案 0 :(得分:1)
这就是前瞻性:
/(aa1111bbb2222ccccc)([\s\S]*?)(?=aa1111bbb2222ccccc|$)/g
Regex101 demo;模式保存在第一个捕获组中,其余部分保留在第二个捕获组中。使用懒星防止过度捕获。
As(几乎总是),有另一种方法,使用indexOf
来识别字符串中子字符串的位置,然后相应地切片源:
var str = 'aa1111bbb2222ccccc********aa1111bbb2222ccccc****************\naa1111bbb2222cccccaa1111bbb2222ccccc****aa1111bbb2222ccccc';
var marker = 'aa1111bbb2222ccccc';
var markerLen = marker.length;
var matches = [];
var start = str.indexOf(marker);
var end;
while (start !== -1) {
end = start + markerLen;
start = str.indexOf(marker, end);
matches.push({
title: marker,
comment: str.slice(end, start === -1 ? void 0 : start)
});
}
console.log(matches);
答案 1 :(得分:0)