我见过很多这方面的例子,但没有帮助。我有以下字符串:
var str = 'asfasdfasda'
我要提取以下内容
asfa asfasdfa asdfa asdfasda asda
即所有以' a'开头的子字符串以' a'
结尾这是我的正则表达式
/a+[a-z]*a+/g
但这总是只给我一场比赛:
[ 'asdfasdfsdfa' ]
有人可以在我的实施中指出错误。
感谢。
修改更正了所需的子字符串数。请注意,还需要重叠和重复的子字符串。
答案 0 :(得分:5)
要捕获重叠匹配,您需要预先查找正则表达式并抓住捕获的组#1和#2:
/(?=(a.*?a))(?=(a.*a))/gi
<强>解释强>
(?=...)
被称为前瞻,它是一个零宽度断言,如锚点或单词边界。它只是向前看,但不会向前移动正则表达式指针,从而使我们能够在组中抓取重叠匹配。
<强>代码:强>
var re = /(?=(a.*?a))(?=(a.*a))/gi;
var str = 'asfasdfasda';
var m;
var result = {};
while ((m = re.exec(str)) !== null) {
if (m.index === re.lastIndex)
re.lastIndex++;
result[m[1]]=1;
result[m[2]]=1;
}
console.log(Object.keys(result));
//=> ["asfa", "asfasdfasda", "asdfa", "asdfasda", "asda"]
答案 1 :(得分:1)
解析器不会在磁带上转到先前的状态以再次匹配启动a。
var str = 'asfaasdfaasda'; // you need to have extra 'a' to mark the start of next string
var substrs = str.match(/a[b-z]*a/g); // notice the regular expression is changed.
alert(substrs)
&#13;
答案 2 :(得分:0)
你可以这样计算:
var str = "asfasdfasda";
var regex = /a+[a-z]*a+/g, result, indices = [];
while ((result = regex.exec(str))) {
console.log(result.index); // you can instead count the values here.
}