我见过很多这方面的例子,但没有帮助.我有以下字符串:
var str = 'asfasdfasda'
Run Code Online (Sandbox Code Playgroud)
我想提取以下内容
asfa asfasdfa asdfa asdfasda asda
Run Code Online (Sandbox Code Playgroud)
即所有以'a'开头并以'a'结尾的子字符串
这是我的正则表达式
/a+[a-z]*a+/g
Run Code Online (Sandbox Code Playgroud)
但这总是只给我一个匹配:
[ 'asdfasdfsdfa' ]
Run Code Online (Sandbox Code Playgroud)
有人可以在我的实施中指出错误.
谢谢.
编辑已更正所需的子串数.请注意,还需要重叠和重复的子字符串.
要捕获重叠匹配,您需要预测正则表达式并抓取捕获的组#1和#2:
/(?=(a.*?a))(?=(a.*a))/gi
Run Code Online (Sandbox Code Playgroud)
说明:
(?=...)被称为前瞻,它是一个零宽度断言,如锚点或单词边界.它只是向前看,但不会向前移动正则表达式指针,从而使我们能够在组中抓取重叠匹配.
码:
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"]
Run Code Online (Sandbox Code Playgroud)