![](/img/trans.png)
[英]What's the reason behind to include a engine in Java to run JavaScript?
[英]Javascript string replace weirdness — $$$$ gets collapsed to $$ — what's the reason behind this result?
在工作中,我遇到了一個問題,我們的應用程序的用戶正在接收具有無效unicode字符(0xffff)的消息,根據標准,該字符永遠不應該映射到符號。
作為一個快速的工作,我做了以下:
badStr.replace(/\uffff/g, " ");
它按預期工作,並讓用戶繼續使用該應用程序,直到找到更好的解決方案。
然而,當我正在玩這個時,我隨機嘗試了一個字符串替換“$$$$”,它以某種方式折疊了“$$”。
你可以親眼看看。 嘗試在瀏覽器網址欄中粘貼以下行:
javascript: alert(String.fromCharCode(0xffff).replace(/\uffff/g, "@@@@"));
結果是 @@@@
但
javascript: alert(String.fromCharCode(0xffff).replace(/\uffff/g, "$$$$"));
結果是$$
這實際上似乎是任何字符串替換的問題,使用$$$$作為字符串替換。
都:
javascript: alert(String.fromCharCode(0x1234).replace(/\u1234/g, "$$$$"));
javascript: alert("hella".replace("h", "$$$$"));
導致$$崩潰。
關於為什么字符串替換行為這樣的任何想法?
那是因為替換字符串中的$
具有特殊含義(組擴展)。 看看這個例子:
alert("foo".replace(/(.*)/, "a$1b"));
這就是為什么$$
被解釋為$
,因為你需要實際用$1
替換東西(字面意思是沒有組擴展):
alert("foo".replace(/(.*)/, "a$$1b"));
$
sign是替換參數中的一個特殊字符,表示正則表達式模式中括號中的子匹配( $1
, $2
等)。 因此,要獲得$
您必須通過鍵入$$
來“逃避”它。 這是你做過兩次的事。
替換字符串中的$用於表示使用匹配組$ 1,$ 2等,以將$放入需要使用其中兩個的替換字符串中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.