语法
str.replace(regexp|substr, newSubStr|function)
使用字符串作为参数
| 变量名 | 代表值 |
|---|---|
| $$ | 插入一个”$” |
| $& | 插入匹配的子串 |
| $` | 插入当前匹配的子串左边的内容。 |
| $ | 插入当前匹配的子串右边的内容。 |
| $n | 如果第一个参数是 RegExp对象,并且 n 是个小于100的非负整数,那么插入第 n 个括号匹配的字符串。提示:索引是从1开始。如果不存在第 n个分组,那么将会把匹配到到内容替换为字面量。列如不存在第3个分组,就会用“$3”替换匹配到的内容。 |
| $<name> | 这里Name 是一个分组名称。如果在正则表达式中并不存在分组(或者没有匹配),这个变量将被处理为空字符串。只有在支持命名分组捕获的浏览器中才能使用。 |
指定一个函数作为参数
你可以指定一个函数作为第二个参数。在这种情况下,当匹配执行后,该函数就会执行。 函数的返回值作为替换字符串。 (注意:上面提到的特殊替换参数在这里不能被使用。) 另外要注意的是,如果第一个参数是正则表达式,并且其为全局匹配模式,那么这个方法将被多次调用,每次匹配都会被调用。
| 变量名 | 代表的值 |
|---|---|
match |
匹配的子串。(对应于上述的$&。) |
p1,p2, ... |
如果replace()方法的第一个参数是一个RegExp 对象,则代表第n个括号匹配的字符串。(对应于上述的 2等。)例如,如果是用 /(a+)(+)/ 这个来匹配,p1 就是匹配的 a+,p2 就是匹配的 +。 |
offset |
匹配到的子字符串在原字符串中的偏移量。(列如,如果原字符串是 abcd ,匹配到的子字符串是 bc ,那么这个参数将会是 1) |
string |
被匹配的原字符串。 |
| NamedCaptureGroup | 命名捕获组匹配的对象 |
(准确的参数个数依赖于 replace() 的第一个参数是否是一个正则表达式(RegExp)对象,以及这个正则表达式中指定了多少个括号子串,如果这个正则表达式里使用了命名捕获, 还会添加一个命名捕获的对象)
下面的例子将会使 newString 变成 abc - 12345 - #$*% :
function replacer(match, p1, p2, p3, offset, string) {
// p1 is nondigits, p2 digits, and p3 non-alphanumerics
return [p1, p2, p3].join( - );
}
var newString = abc12345#$*% .replace(/([^d]*)(d*)([^w]*)/, replacer);
console.log(newString); // abc - 12345 - #$*%
案例:电话号码脱敏
function hidePhoneNum(s) {
return s.replace(/(1[3-9]d)(d{4})(d{4})/g, function(match, p1, p2, p3){
return p1 + **** + p3
})
}
let s = 家长电话:13550991234,学生电话:15683173300。请于31日之前来校报道
console.log(hidePhoneNum(s)) // 家长电话:135****1234,学生电话:156****3300。请于31日之前来校报道
© 版权声明
文章版权归作者所有,未经允许请勿转载。如内容涉嫌侵权,请在本页底部进入<联系我们>进行举报投诉!
THE END
















暂无评论内容