JavaScript中带有捕获组的RegExp对象和正则字面量匹配为何不一致?

 robinqianqcs521 发布于 2022-11-12 07:17

在网上查过资料,说RegExp对象和正则表达式的字面量(literals)是等价的,不同的是前者是预编译的。如果这样的话,按理说它们匹配的结果应该是完全一致的。

可是在正则表达式中加入捕获组(capturing parentheses)时,发现两者匹配的结果不一致。如下面的代码所示:

var names = 'name name-57';
names.replace(/.*name-(\d+).*/, '$1') // [1]
names.replace(new RegExp('.*name-(\d+).*'), '$1') // [2]

[1]返回的是"57",而[2]返回的是"name name-57"

以上运行结果是在Chrome 55的控制台中得到的。

我猜测可能和预编译对象和捕获组间的关系有关,但是并未找到解释原因的资料。请问这种不一致的情况是什么原因呢?如果我想用RegExp对象来得到与[1]相同的结果应该如何写呢?

1 个回答
  • names.replace(new RegExp('.*name-(\\d+).*'), '$1') // [2]

    2022-11-12 11:04 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有