2011-08-26 50 views
2

在工作中,我遇到了一個問題,我們的應用程序的用戶正在接收帶有無效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", "$$$$")); 

結果在$$崩潰。

任何想法爲什麼字符串替換行爲這樣?

+0

我不知道你的問題的答案,但這個角色來自哪裏呢?它如何進入你的消息系統? –

+0

執行電子郵件。我猜測他們正在剪切和粘貼東西,使用多種utf編碼,並且不知何故它們以此結束。 – Gopherkhan

回答

7

這是因爲$中的替換字符串有特殊含義(組擴展)。看看這個例子:

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

+2

另請參閱:https://developer.mozilla。org/en/JavaScript/Reference/Global_Objects/String /替換 – Blazemonger

+0

謝謝,添加了文檔鏈接。 –

+0

狂野狂野。我從來不知道這件事! – Gopherkhan

1

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

2

$符號是替換參數中的一個特殊字符,用於表示正則表達式模式中的括號中的子匹配($1,$2等)。所以要得到一個$你必須通過輸入$$來「逃避」它。這是你做了兩次。

相關問題