replace(/"([^"]*)"/g, "'$1'")与replace(/"/g, "'")效果相同,为何要用前者

在 w3school 的 replace() 方法介绍中,有这样一个例子:

// 在本例中,我们将把字符串中所有单词的首字母都转换为大写
name = '"a", "b"';
name.replace(/"([^"]*)"/g, "'$1'"); // 'a', 'b'

而换成如下简写

name = '"a", "b"';
name.replace(/"/g, "'"); // 'a', 'b'

效果是相同的。既然后者可以实现,为什么要用前者?是仅为了说明$1的用法还是有什么好处?

阅读 5.7k
1 个回答

这两个正则表达式的含义就不一样
你这个replace(/"/g, "'"); 是把所有的"转换为'

而这个表达式 replace(/"([^"]*)"/g, "'$1'"); 是把所有的双引号包裹着,且中间没有出现双引号的值,替换为用单引号包裹。

比如有这样的一个字符串:'"dsds"dsd","ggfgfg"'
替换结果为:`

'"dsds"dsd","ggfgfg"'.replace(/"/g, "'");//值为:'dsds'dsd','ggfgfg'
'"dsds"dsd","ggfgfg"'.replace(/"([^"]*)"/g, "'$1'"); //值为: 'dsds'dsd','ggfgfg"
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题