使用正则表达式计算字符串中子字符串的所有出现次数
Counting all the occurrences of a substing in a string using regular expression
我见过很多这样的例子,但没有帮助。我有以下字符串:
var str = 'asfasdfasda'
我想提取以下
asfa asfasdfa asdfa asdfasda asda
即所有以"a"开头、以"a)结尾的子字符串
这是我的正则表达式
/a+[a-z]*a+/g
但这总是只给我一个匹配:
[ 'asdfasdfsdfa' ]
有人可以指出我执行过程中的错误。
谢谢。
编辑已更正不需要的子字符串。请注意,重叠和重复的子字符串也是必需的。
为了捕获重叠的匹配,您需要前瞻regex并获取捕获的组#1和#2:
/(?=(a.*?a))(?=(a.*a))/gi
RegEx演示
解释:
CCD_ 1被称为前瞻,它是像锚或单词边界一样的零宽度断言。它只是向前看,但不向前移动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"]
解析器不会转到磁带上的前一个状态以匹配再次启动的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)
您可以这样计数:
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.
}
相关文章:
- 正则表达式在字符串中找到base64
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 从字符串中提取年份的Javascript正则表达式
- Javascript 如何强制 string.replace 不将我的字符串解释为正则表达式
- 如何将正则表达式包含到字符串数组中
- 使用正则表达式匹配长度为六个字符的字母数字字符串
- 使用正则表达式反转字符串中的元音
- 如何分割由JavaScript中使用正则表达式的多个部分组成的字符串
- 在字符串列表中搜索任何出现的单词,如果单词的第一个字符匹配,则高亮匹配单词.Javascript正则表达式
- 删除两个字符串正则表达式之间的所有内容
- Javascript,字符串正则表达式匹配
- 字符串正则表达式模式.replace(/{0}/, “$0.00”) 不起作用
- Javascript:字符串正则表达式
- 如何在JavaScript中子字符串正则表达式
- 匹配大写或小写字符串正则表达式
- 逗号和空格分隔的数字和连字符分隔的字符串正则表达式
- 解析CGI查询字符串正则表达式
- 分析已知键的字符串正则表达式,但保留分隔符
- 在一组字符串中重新排列一个字符串 - 正则表达式
- 从字符串正则表达式中提取多个值