Gop*_*han 2 javascript string replace
在工作中,我遇到了一个问题,我们的应用程序的用户正在接收具有无效unicode字符(0xffff)的消息,根据标准,该字符永远不应该映射到符号.
作为一个快速的工作,我做了以下:
badStr.replace(/\uffff/g, " ");
Run Code Online (Sandbox Code Playgroud)
它按预期工作,并让用户继续使用该应用程序,直到找到更好的解决方案.
然而,当我正在玩这个时,我随机尝试了一个字符串替换"$$$$",它以某种方式折叠了"$$".
你可以亲眼看看.尝试在浏览器网址栏中粘贴以下行:
javascript: alert(String.fromCharCode(0xffff).replace(/\uffff/g, "@@@@"));
Run Code Online (Sandbox Code Playgroud)
结果是 @@@@
但
javascript: alert(String.fromCharCode(0xffff).replace(/\uffff/g, "$$$$"));
Run Code Online (Sandbox Code Playgroud)
结果是$$
这实际上似乎是任何字符串替换的问题,使用$$$$作为字符串替换.
都:
javascript: alert(String.fromCharCode(0x1234).replace(/\u1234/g, "$$$$"));
javascript: alert("hella".replace("h", "$$$$"));
Run Code Online (Sandbox Code Playgroud)
导致$$崩溃.
关于为什么字符串替换行为这样的任何想法?
那是因为$在替换字符串中有特殊含义(组扩展).看看这个例子:
alert("foo".replace(/(.*)/, "a$1b"));
Run Code Online (Sandbox Code Playgroud)
这就是为什么$$被解释为$,对于你需要实际替换某些东西的情况$1(字面意思是没有组扩展):
alert("foo".replace(/(.*)/, "a$$1b"));
Run Code Online (Sandbox Code Playgroud)