string.replace(searchvalue,newvalue)正则表达式
searchvalue
必须。规定子字符串或要替换的模式的 RegExp 对象。请注意,若是该值是一个字符串,则将它做为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象。数组
newvalue
必需。一个字符串值。规定了替换文本或生成替换文本的函数。函数
String
一个新的字符串,是用 replacement 替换了 regexp 的第一次匹配或全部匹配以后获得的。spa
这个参数比较好理解,要么是字符串要么是正则表达式。上文说的“请注意,若是该值是一个字符串,则将它做为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象。”,意思是'/abc/gi'
不会被解析为正则对象,即便它跟正则写法同样。code
本文不说第一个参数,只说第二个参数。regexp
这个参数要么是普通字符串,要么是正则替换表达式字符串,说来讲去都是字符串,要么是一个函数。对象
特殊替换字符:blog
字符 替换文本
$& 与正则相匹配的字符串
$` 匹配字符串左边的字符
$’ 匹配字符串右边的字符
$1,$2,$,3,…,$n 匹配结果中对应的分组匹配结果索引
$& 适用于没有子表达式的状况字符串
var sStr='讨论一下正则表达式中的replace的用法'; sStr.replace(/正则表达式/,'《$&》'); // 获得:"讨论一下《正则表达式》中的replace的用法"
匹配字符串左边的全部字符
var sStr='讨论一下正则表达式中的replace的用法'; sStr.replace(/正则表达式/,'《$`》'); // 获得:"讨论一下《讨论一下》中的replace的用法"
匹配字符串右边的全部字符,注意,既然 $' 有单引号,那么外面的引号必须双引号,若是不能够双引号,只能把 $' 的单引号转义。
var sStr='讨论一下正则表达式中的replace的用法'; sStr.replace(/正则表达式/,"《$'》"); // 获得:"讨论一下《中的replace的用法》中的replace的用法"
依次匹配子表达式
var sStr='讨论一下正则表达式中的replace的用法'; sStr.replace(/(正则)(.+?)(式)/,"《$1》$2<$3>"); // 获得:"讨论一下《正则》表达<式>中的replace的用法"
先看arguments
的用法:
var sStr='讨论一下正则表达式中的replace的用法'; sStr.replace(/(正则).+?(式)/,function() { console.log(arguments); }); // ["正则表达式", "正则", "式", 4, "讨论一下正则表达式中的replace的用法"]
参数分别为:
匹配到的字符串(此例为"正则表达式")
若是正则使用了分组匹配就为多个不然无此参数。(此例的参数就分别为 "正则", "式")
匹配字符串的对应索引位置(也就是"正则表达式"的索引位置,此例为4)
原始字符串
若是加上全局标识符g,则是:
var sStr='讨论一下正则表达式中的replace的正则表达式用法'; sStr.replace(/(正则).+?(式)/g,function() { console.log(arguments); }); // ["正则表达式", "正则", "式", 4, "讨论一下正则表达式中的replace的正则表达式用法"] // ["正则表达式", "正则", "式", 19, "讨论一下正则表达式中的replace的正则表达式用法"]
也就是说,arguments是当前函数的内置属性,指代当前匹配的参数伪数组。arguments[0]就是当前匹配的字符串。
var sStr='讨论一下正则表达式中的replace的正则表达式用法'; sStr.replace(/(正则).+?(式)/g,function() { console.log(arguments[0]); return arguments[0] + 'a'; }); // 正则表达式 // 正则表达式 // "讨论一下正则表达式a中的replace的正则表达式a用法"
函数作参数的优点,在于能够对arguments作更复杂的操做,而不像只是一个字符串参数那么简陋。固然,arguments不是必须用,能够不用。