我想使用JavaScript的替換函數來替換字符串。但它只是取代了第一例。所以,當我使用正則全局表達式,Javascript替換函數使用正則表達式
var result = 'moaning|yes you|hello test|mission control|com on'.replace(/|/g, ';');
我得到:http://jsfiddle.net/m8UuD/196/
我想:
呻吟;是你,你好測試;任務控制; COM上
我想使用JavaScript的替換函數來替換字符串。但它只是取代了第一例。所以,當我使用正則全局表達式,Javascript替換函數使用正則表達式
var result = 'moaning|yes you|hello test|mission control|com on'.replace(/|/g, ';');
我得到:http://jsfiddle.net/m8UuD/196/
我想:
呻吟;是你,你好測試;任務控制; COM上
簡單地逃離管道:
'moaning|yes you|hello test|mission control|com on'.replace(/\|/g, ';');
Here you'll find the list of regex special characters that you should generally escape。
var result = 'moaning|yes you|hello test|mission control|com on'.replace(/\|/g, ';');
謝謝,這工作。沒有repu投票。 – 2013-04-05 19:36:34
您需要轉義'|'像:
var result = 'moaning|yes you|hello test|mission control|com on'.replace(/\|/g, ';');
你也可以使用.split()
和.join()
:
'moaning|yes you|hello test|mission control|com on'.split('|').join(';')
這可能是一個愚蠢的問題在這方面,但你知道任何「性能問題」之間,這與「替換」正則表達式?我知道這一點,替換將有效地做同樣的事情,我只是想知道。它是「密集的」分裂,然後加入?特別是與使用Regex相比?我敢肯定,無論哪種情況,這並不重要,因爲這是一個小字符串,只執行一次,但我只是想我會問 – Ian 2013-04-05 19:38:52
@Ian:split/join看起來要快一點,至少在Chrome上: http://jsperf.com/split-join-vs-regex2,但不是太多 – Blender 2013-04-05 20:22:21
感謝您提供。我應該自己做到這一點。當然,在Firefox中,我得到了相反的結果:)我想我在想知道你是否知道類似「好的,正則表達式事先被編譯好,因此它可以更快地執行」或類似的東西。我還想知道是否與字符串的大小有關係。出於某種原因,我覺得split/join不如字符串的大小增加。 – Ian 2013-04-05 22:33:46
許多字符被保留,因爲在正則表達式的特殊含義,所以要使用其中的一個你需要通過在特殊字符之前放置反斜槓\
來「逃避」它。它們是:
( start of a sub-expression
) end of a sub-expression
{ start of repetition range
} end of a repetition range
[ start of a character set
] end of a character set
+ one or more repetitions
* zero or more repetitions
^ start of string
$ end of string
| "or" connection between alternatives
\ start of special code or escape
/ start or end of regexp pattern
例如定期exprerssion匹配所有打開的括號是/\[/
(注意反斜線)。如果你需要尋找一個反斜槓,你必須在它前面加一個反斜槓(所以加倍)。
不幸的是,沒有預定義的Javascript函數來「轉義」所有特殊字符。
謝謝,這是有效的。沒有repu投票。 – 2013-04-05 19:37:05
@SamiyaAkhtar只要你確定你接受的答案,當你能 – Ian 2013-04-05 19:37:43