RegExp |匹配可能包含任意长度的尾随文本的模式

时间:2015-08-30 12:30:41

标签: javascript regex

我有一个字符串,其中重复相同长度的主模式(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包装的东西。

2 个答案:

答案 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);

Eval.in demo

答案 1 :(得分:0)

怎么样:

(aa1111bbb2222ccccc)+

Regular expression visualization

Debuggex Demo