javascript - 如何为两个对应模式之间的共享字符编写正则表达式?
问题描述
我将在“caaab”中找到所有“aa”子字符串。所以,我使用了以下正则表达式。
/aa/g
使用引用的表达式,我希望 JavaScript 的match方法返回两个对应的模式。如您所见,中间的共享“a”导致两个“aa”模式!尽管如此,它只返回第一个。正则表达式有什么问题,我该如何解决?
let foundArray=d.match(/aa/g);
解决方案
这是解决此问题的一种方法。我们可以先记录下输入字符串的长度,以备后用。然后,a(?=a)
用空字符串进行全局正则表达式替换。一个接一个,这将替换输入中每个出现的子字符串aa
。然后,我们可以将输出的长度与输入的长度进行比较,以确定发生了多少次aa
。
var input = "caaab";
var sLen = input.length;
var output = input.replace(/a(?=a)/g, "");
var eLen = output.length;
console.log("There were " + (sLen - eLen) + " occurrences of aa in the input");
请注意,您遇到的困难与 JavaScript 的正则表达式引擎的行为有关。如果您替换aa
,它将消耗所有内容,因此可能会消耗a
下一个连续aa
匹配的第一个字母。使用a(?=a)
可以解决这个问题,因为前瞻(?=a)
不会消耗下一个a
.
推荐阅读
- xcode - 如何在 InterfaceBuilder 中使用 systemGrayXColor?
- javascript - 红圈在开始前的左上角
- wordpress - 如何在 wordpress 管理面板中为自定义帖子类型添加媒体附件
- sql - 比较不同表中的重复项数
- json - 如何在不明确指定整个路径的情况下引用另一个模式中定义的内部对象
- python - SQLAlchemy:为关系列赋值
- mongodb - Mongodb - 按状态查询和分组文档
- sql-server - SQL,所有表,一些特殊列,第一个 NOT NULL 值
- javascript - Highcharts:如何更改“afterSetExtremes”上的“overscroll”参数?
- hugo - 是否有可能,使框架 HUGO 从 json 构建动态网站?