正则表达式`replace`的问题
本文介绍了正则表达式`replace`的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
JS语言精粹中有如下代码:
'(555)666-1212'.replace(/\((\d{3})\)/g, '$1-');
// 555-666-1212
按照定义$1-
是替换捕获组1的内容为捕获组1-, 那么问题来了: 捕获组1不应该是555
而不是(555)
? 为什么两个括号也被替换掉了?
'(555)666-1212'.match(/\((\d{3})\)/)
//["(555)", "555"]
解决方案
一步一步来:
String.prototype.replace.call('223322', /22(\d{2})22/, 'replaced!')
//"replaced!"
String.prototype.replace
是会搜寻整个正则表达式/22(d{2})22/
的内容并用'replaced!'
字符串来替换, 不管正则内有没有分组;
String.prototype.replace.call('223322', /22(\d{2})22/, '$1')
//"33"
'$1'
则指代捕获组1的内容, 在这里就是'33'
. 因此整个正则所匹配的内容会被替换成为'$1'
的内容.
具体到这里, /((d{3}))/g
匹配的是'(555)'
, 捕获组1捕获到的则是'555'
, 因此'(555)'
会被替换为'555' + '-'
.
这篇关于正则表达式`replace`的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文