我有一个字符串,包含我的名字christiancattano和这样定义的正则表达式搜索模式

/(cattano|cattan|attano|chris|catta|attan|ttano|chri|hris|catt|atta|ttan|tano|chr|hri|ris|cat|att|tta|tan|ano)+/ig

在regex101中,如果我在顶部栏中输入搜索模式,然后在测试字符串框中输入逐字,christiancattano,则它将突出显示chriscattano。这是我所期望的行为。

在我的JavaScript代码中,如果我运行以下行
var regExPattern: string = '(cattano|cattan|attano|chris|catta|attan|ttano|chri|hris|catt|atta|ttan|tano|chr|hri|ris|cat|att|tta|tan|ano)+';

var regExObj: RegExp = new RegExp(regExPattern, 'g');

var match: string[] = regExObj.exec('christiancattano');

console.log(`match: ${match}`);

我收到此输出
match: chris,chris

regex101为什么显示我的匹配符合我的期望,chriscattano,但是我的Javascript代码产生了不同的结果?

最佳答案

即使您将正则表达式与RegExp#exec()修饰符一起使用,g也仅返回单个匹配对象。

您可以将String#match与带有g修饰符的正则表达式一起使用,以获取所有匹配值:

var match: string[] = 'christiancattano'.match(regExObj)

09-16 05:34