首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数字母之前没有其他字母

数字母之前没有其他字母
EN

Stack Overflow用户
提问于 2017-08-06 05:32:24
回答 3查看 85关注 0票数 0

如何在JavaScript RegEx中实现以下计数?

获取字母B事件的计数,这些事件不是,而是前面的字母A

示例:

  • AB B AB => 1
  • B AB B => 2
  • A B A B => 2
  • BBB => 3

溶液

在对这里给出的答案进行了大量实验之后,我发现在我的示例中没有任何值得使用的RegEx解决方案。所有提供的解决方案以某种方式导致代码比简单的算法方法慢得多。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-06 05:56:51

我认为这应该像哈桑·伊玛姆在评论中所建议的那样起作用。

代码语言:javascript
运行
复制
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');

票数 2
EN

Stack Overflow用户

发布于 2017-08-06 05:54:49

您无法在Javascript中使用负面的(?<!A)B

它将在Php、Python中工作,但在Javascript中不起作用。(https://regex101.com/r/MZhqSL/1)

直进法:

代码语言:javascript
运行
复制
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);

票数 1
EN

Stack Overflow用户

发布于 2017-08-06 06:17:30

据我所知,JavaScript不支持负查找,所以我认为您最好的选择是反转字符串并使用负前瞻性。

代码语言: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

更多关于旁观者的事。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45528876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档