簡體   English   中英

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"));

另請參閱https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_string_as_a_parameter

$ sign是替換參數中的一個特殊字符,表示正則表達式模式中括號中的子匹配( $1$2等)。 因此,要獲得$您必須通過鍵入$$來“逃避”它。 這是你做過兩次的事。

替換字符串中的$用於表示使用匹配組$ 1,$ 2等,以將$放入需要使用其中兩個的替換字符串中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM