正则表达式`replace`的问题

查看:75
本文介绍了正则表达式`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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆