先来看一个简单的例子吧。
0 |
var str = "123X321".replace("X", "$'"); |
替换后的 str 是什么呢?
是 ”123$’321″ 。。。吗??
如果你的浏览器是 IE6-8 的话,确实是这个结果,可是那只是变态IE的结果。
标准浏览器下会是什么呢?
0 1 |
var str = "123X321".replace("X", "$'"); console.log(str); |
竟然是 ”123321321″ 为什么会是这个结果呢?
还是看权威的文档吧,《Specifying a string as a parameter》。
在这里,我们可以看到 $$, $&, $, $' 和 $n/$nn 的格式。
相信很多学过 js 正则的应该都用印象。
其实我一直以为只有在正则里才能用这些替换参数,直到前些天被坑才真正掌握这个知识点。
其实 $$, $&, $, $’ 在普通字符串替换时也可以使用
$$ 表示 $ 字符
$& 表示匹配到的字符
$` 表示匹配到的字符之前的那部分
$’ 表示匹配到的字符之后的那部分
但是 $n 或 $nn 只有在正则模式捕获组才能使用。
例如
0 1 2 3 4 5 6 7 8 9 |
var str = "123X321"; console.log( "$$", str.replace("X", "$$") ); // X 换成了 $ console.log( "$&", str.replace("X", "$&") ); // X 换成了 X console.log( "$`", str.replace("X", "$`") ); // X 换成了 123 console.log( "$'", str.replace("X", "$'") ); // X 换成了 321 console.log( "$'", str.replace(/X/, "$'") ); // X 换成了 321 // $n 这种格式只有正则能用 console.log( "$1", str.replace(/(X)(\d)/, "$1") ); // X3 换成了 X console.log( "$2$1", str.replace(/(X)(\d)/, "$2$1") ); // X3 换成了 3X |