我正在计算一个单词中特定密钥对的出现
console.log("acceptable".match(/ab|ac|ar/gi).length); //2
这可以按预期工作,但是包括锚定的单个字母,例如“ ^ a”会覆盖其他匹配项:
console.log("acceptable".match(/^a|ab|ac|ar/gi).length); //2, should be 3
如regex101.com示例所示,^ a覆盖ac匹配,因此仅找到2个匹配。我需要计算每个实例,甚至包括重复的“ ^ a”作为“ ab”的子字符串。我可以不用正则表达式来解决这个问题,但是正则表达式更优雅。
任何帮助将不胜感激。
您可以使用正向前瞻和交替来检查a
字符串开头的,并捕获捕获组中的值,您可以在代码中进行检查。
(?=(a[bcr])|(?<=^(a)))
(?=
积极向前
(a[bcr])
捕获组1,匹配ab
ac
或ar
|
要么(?<=^(a))
正向后看,在组2中捕获一个)
近距离正面展望const regex = /(?=(a[bcr])|(?<=^(a)))/gmi;
const str = `acceptable`;
let res = Array.from(str.matchAll(regex), m => m[2] ? m[2] : m[1]);
console.log(res)
console.log(res.length)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句