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
进入测试字符串框,它将高亮chris
和cattano
。这是我期待的行为。
在我的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显示了我的比赛是我所期望的,chris
和cattano
,但我的Javascript代码产生了不同的结果?
使用'match':''christiancattano'.match(regExObj)' –
在Javascript中,当你执行使用'g'修饰符的RegExp,它一次只返回一个匹配。你必须在循环中调用它来获得所有的匹配。删除修饰符。 – Barmar
@WiktorStribiżew我的男人!你又做到了!非常感谢!我刚刚阅读了string.match()和regex.exec()之间的区别,并且我看到我在尝试获取匹配项的字符串[]时出错。今天再次感谢您的帮助! – Chris