JS正则分组匹配调用exec方法返回结果中hello出现两次的原因求解
原因解释
这是JavaScript正则exec()方法的标准返回规则,和你正则里的捕获组设计有关:
- 返回数组的第
0位,永远是整个正则表达式匹配到的完整字符串:你的正则/'([^']*)'/完整匹配的是带单引号的内容'hello',所以数组第0位是"'hello'" - 从数组第
1位开始,会依次返回正则中每个()包裹的捕获组匹配到的内容:你的正则里写了([^']*)这个捕获组,用来匹配两个单引号中间不带单引号的内容,匹配结果就是hello,所以会作为数组的第二个元素返回。
如果你不需要单独提取单引号内的内容,可以把捕获组改成非捕获组(加?:前缀),就不会返回额外的匹配结果了:
let quotedText = /'(?:[^']*)'/; console.log(quotedText.exec("she said 'hello'")); // 输出:["'hello'"]
内容的提问来源于stack exchange,提问作者amissak
相关产品推荐
相关产品推荐

