首页 > 代码库 > js拾遗: replace 替换参数

js拾遗: replace 替换参数

先来看一个简单的例子吧。

var str = "123X321".replace("X", "$‘");

替换后的 str 是什么呢?
"123$‘321" 。。。吗??
如果你的浏览器是 IE6-8 的话,确实是这个结果,可是那只是变态IE的结果。
标准浏览器下会是什么呢?

var str = "123X321".replace("X", "$‘");console.log(str);

点击右上角 运行 看看结果吧。
竟然是 "123321321" 为什么会是这个结果呢?
还是看权威的文档吧,《Specifying a string as a parameter》。
在这里,我们可以看到 $$, $&, $`, $‘$n/$nn 的格式。
相信很多学过 js 正则的应该都用印象。
其实我一直以为只有在正则里才能用这些替换参数,直到前些天被坑才真正掌握这个知识点。

其实 $$$&$`, $‘ 在普通字符串替换时也可以使用
$$ 表示 $ 字符
$& 表示匹配到的字符
$` 表示匹配到的字符之前的那部分
$‘ 表示匹配到的字符之后的那部分
但是 $n$nn 只有在正则模式捕获组才能使用。

例如

var str = "123X321";console.log( "$$", str.replace("X", "$$") ); // X 换成了 $console.log( "$&", str.replace("X", "$&") ); // X 换成了 Xconsole.log( "$`", str.replace("X", "$`") ); // X 换成了 123console.log( "$‘", str.replace("X", "$‘") ); // X 换成了 321console.log( "$‘", str.replace(/X/, "$‘") ); // X 换成了 321// $n 这种格式只有正则能用console.log( "$1", str.replace(/(X)(\d)/, "$1") ); // X3 换成了 Xconsole.log( "$2$1", str.replace(/(X)(\d)/, "$2$1") ); // X3 换成了 3X

这样应该很清楚这些替换参数的作用了吧,,千万别再次被坑到了。