使用正则表达式计算字符串中所有匹配项的出现次数

I_D*_*ing 2 javascript regex

我见过很多这方面的例子,但没有帮助.我有以下字符串:

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)

有人可以在我的实施中指出错误.

谢谢.

编辑已更正所需的子串数.请注意,还需要重叠和重复的子字符串.

anu*_*ava 5

要捕获重叠匹配,您需要预测正则表达式并抓取捕获的组#1和#2:

/(?=(a.*?a))(?=(a.*a))/gi
Run Code Online (Sandbox Code Playgroud)

RegEx演示

说明:

(?=...)被称为前瞻,它是一个零宽度断言,如锚点或单词边界.它只是向前看,但不会向前移动正则表达式指针,从而使我们能够在组中抓取重叠匹配.

了解更多关于环顾四周的信息


码:

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)