先来看一个简单的例子吧。
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
这样应该很清楚这些替换参数的作用了吧,,千万别再次被坑到了。
新闻热点
疑难解答