2017-04-17 48 views
3

我有一个字符串包含我的名字christiancattano和正则表达式搜索模式定义为这样Regex101和JS正则表达式搜索出不同的结果

/(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代码产生了不同的结果?

+3

使用'match':''christiancattano'.match(regExObj)' –

+3

在Javascript中,当你执行使用'g'修饰符的RegExp,它一次只返回一个匹配。你必须在循环中调用它来获得所有的匹配。删除修饰符。 – Barmar

+0

@WiktorStribiżew我的男人!你又做到了!非常感谢!我刚刚阅读了string.match()和regex.exec()之间的区别,并且我看到我在尝试获取匹配项的字符串[]时出错。今天再次感谢您的帮助! – Chris

回答

2

RegExp#exec()只返回单个匹配对象,即使您使用带有g修饰符的正则表达式。

您可以用正则表达式使用String#matchg修饰符来获取所有匹配值:

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