如何在JavaScript RegEx中实现以下计数?
获取字母B事件的计数,这些事件不是,而是前面的字母A。
示例:
AB B AB => 1B AB B => 2A B A B => 2BBB => 3溶液
在对这里给出的答案进行了大量实验之后,我发现在我的示例中没有任何值得使用的RegEx解决方案。所有提供的解决方案以某种方式导致代码比简单的算法方法慢得多。
发布于 2017-08-06 05:56:51
我认为这应该像哈桑·伊玛姆在评论中所建议的那样起作用。
function check(str){
const regex = /(AB{0,1})| /g;
const subst = '';
const result = str.replace(regex, subst);
console.log(result.length);
}
check('AB B AB');
check('B AB B');
check('B A B B');
check('A B A B');
check('BBB');
发布于 2017-08-06 05:54:49
您无法在Javascript中使用负面的(?<!A)B。
它将在Php、Python中工作,但在Javascript中不起作用。(https://regex101.com/r/MZhqSL/1)
直进法:
var s = "AB B AB BB-B", count = 0;
for (i=0, l=s.length; i<l; i++) {
if (s[i] === "B" && (i == 0 || s[i-1] !== "A")) count++;
}
console.log(count);
发布于 2017-08-06 06:17:30
据我所知,JavaScript不支持负查找,所以我认为您最好的选择是反转字符串并使用负前瞻性。
function lookBehind(str) { //returns integer
//split string into array
//use <Array>.reverse()
//Join array into string
str = str.split('').reverse().join('');
//reversed string ^
return str.match(/b(?!(a))/gi).length; //the "i" flag makes the regex case insensitive.
}
console.log(lookBehind("AB B AB")); //1
console.log(lookBehind("B AB B")); //2
console.log(lookBehind("A B A B")); //2
更多关于旁观者的事。
https://stackoverflow.com/questions/45528876
复制相似问题