Node.js正则匹配问题:调整分组捕获以获取预期结果
正则分组捕获不符合预期的解决方法
你的问题源于正则的贪婪匹配特性:.*会尽可能匹配最长的字符串,原正则中第一个(.*)会从kick后的空格开始,一直匹配到倒数第二个空格,把blah 1 2全部捕获,只给第二个分组留下最后一段3。
两种可行解决方案:
1. 切换为非贪婪匹配
将第一个.*改为非贪婪模式.*?,它会匹配到第一个空格后就停止,把剩余内容留给第二个分组:
var prefix = '.' var str = '.kick blah 1 2 3'.match(`${prefix}kick (.*?) (.*)`); console.log(str)
输出:
[ '.kick blah 1 2 3', 'blah', '1 2 3', index: 0, input: '.kick blah 1 2 3', groups: undefined ]
2. 精准匹配单个单词
如果第一个目标是无空格的单个单词,用\S+(匹配一个或多个非空格字符)代替.*更精准,还能避免贪婪/非贪婪的歧义:
var prefix = '.' var str = '.kick blah 1 2 3'.match(`${prefix}kick (\\S+) (.*)`); // 模板字符串中反斜杠需转义 console.log(str)
输出同样符合预期:
[ '.kick blah 1 2 3', 'blah', '1 2 3', index: 0, input: '.kick blah 1 2 3', groups: undefined ]
内容的提问来源于stack exchange,提问作者De-pres
相关产品推荐
相关产品推荐

