2012-10-26 79 views
2

如何用unicode替換字符串中的字符'+'?如何在JavaScript中替換+?

E.G. 
    Before replace -> "table+end" 
    After replace -> "table002Bend" 

我嘗試使用

tableName.replace(/+/g,"002B); 

,但瀏覽器中運行的JS拋出的錯誤,指出:

Invalid identifier

+0

這聽起來像你試圖URL錯誤地編碼一個字符串。 – zzzzBov

回答

3

你需要逃避+,如果在正則表達式中使用它。試試這種方式:

tableName.replace(/\+/g,"002B") 

非轉義加號是匹配一個或多個量詞。

請注意,你甚至不需要這個簡單的替換正則表達式。

+0

最後的分號表示該行是獨立的語句。它不是*它只是一個表達。 –

+0

你是對的,謝謝 –

+1

甚至可能是OP忘記分配這個表達式,例如, 'tableName = tableName.replace(...);'(字符串值是不可變的,所以必須將變量'replace()'(這是一個* new *字符串值)的結果明確地分配給變量。 –

1

使用正則表達式時,+具有特殊含義的正則表達式,需要進行轉義:

tableName = tableName.replace(/\+/g, '002B'); 

如果你只是更換一個+,你不需要正則表達式:

tableName = tableName.replace('+', '002B'); 

但是,與此相關的警告是,它只會替換遇到的第一個+。一種解決方法做一個「快」取代,一切都是爲了結合split()join()

tableName = tableName.split('+').join('002B'); 
+0

不幸的是沒有正則表達式,它只會替換第一個'+',而不是全部。 – jbabey

+0

這似乎比正則表達式更快(在鉻,至少)+1 http://jsperf.com/regex-or-split-join-for-replace – jbabey

2

兩樣東西:+字符在正則表達式有特殊的含義,如果你看一下錯誤你:

SyntaxError: Invalid regular expression: /+/: Nothing to repeat

您看到+有效表示:重複表達式的前一個「部分」。您可以使用反斜槓來指定要替換文字+ char(/\+/您可以創建一個字符類,其中不需要轉義所有特殊字符:/[+]/

之後,你可能仍然有由於缺少字符串分隔符的顯示錯誤:

tableName.replace(/+/g,"002B);//<--missing closing " 

總而言之,無論是其中之一應該做的伎倆:

tableName.replace(/\+/g,"002B"); 
tableName.replace(/[+]/g,"002B"); 

如果,不過你要「url-encode」一個字符串,爲什麼不簡單用encodeURI(tableName)