String.prototype.replace

replace() 方法返回一个由替换值(replacement)替换一些或所有匹配的模式(pattern)后的新字符串。模式可以是一个字符串或者一个正则表达式,替换值可以是一个字符串或者一个每次匹配都要调用的回调函数。

特殊变量

替换字符串可以插入下面的特殊变量名:

变量名 代表的值
$$ 插入一个 "$"。
$& 插入匹配的子串。
$ 插入当前匹配的子串左边的内容。
$' 插入当前匹配的子串右边的内容。
$n 假如第一个参数是 RegExp对象,并且 n 是个小于100的非负整数,那么插入第 n 个括号匹配的字符串。索引是从1开始

示例:

'hello hello'.replace(/l/g, ' $& ') // "he l  l o he l  l o"

以上示例, 在每个匹配到的 l 前后都加一个空格

指定一个函数作为替换参数

你可以指定一个函数作为第二个参数。在这种情况下,当匹配执行后,该函数就会执行。函数的返回值作为替换字符串。如果第一个参数是正则表达式,并且其为全局匹配模式,那么这个方法将被多次调用,每次匹配都会被调用。

下面是该函数的参数:

变量名 代表的值
match 匹配的子串。(对应于上述的$&。)
p1,p2, ... 假如replace()方法的第一个参数是一个RegExp对象,则代表第n个括号匹配的字符串。(对应$1,$2等。)
offset 匹配到的子字符串在原字符串中的偏移量。(比如,如果原字符串是 'abcd',匹配到的子字符串是 'bc',那么这个参数将会是 1)
string 被匹配的原字符串。

示例:

// 定义华氏度转摄氏度的方法
let f2c = (x) => String(x).replace(/(\d+(?:\.\d*)?)F\b/g, (str, p1, offset, s) => (p1-32) * 5/9) + "C";
f2c('0F 100F 200F') // "-17.77777777777778C 37.77777777777778C 93.33333333333333C"

参考

MIT Licensed | Copyright © 2018-present 滇ICP备16006294号

Design by Quanzaiyu | Power by VuePress