2012-03-05 96 views
0

我有三個工作正則表達式的替換字符串,正則表達式用字和字符

string.replace(\catalogue\g, "") // replace a the word catalogue 

string.replace(/[/:]/g, "") // replace the characters /, : 

string.replace(\20%\g, "") // replace '20%' 

,而不是替換字符串三次,我想結合我的正則表達式的。

想要的結果='removethewordnow';

var string = 'rem:ove20%the/word:catalogue20%now'; 

我最新的嘗試是:

string.replace(/\catalogue\b|[/20%:]/g, ""); // works, but catalouge is unaffected and 20% isn't combined as a word 
+0

我可能是錯的,但我覺得你錯過了一個「或」(|)語句 – SpYk3HH 2012-03-05 14:37:50

+0

它的B之後右 - B | [*字母*] – patad 2012-03-05 14:38:59

+0

我並沒有故意逃離c,只是整個單詞「目錄」 - 但第一個實際上工作得很好。 – patad 2012-03-05 14:50:07

回答

2

關閉我的頭頂:

string.replace(/(catalogue|[\/:]|20%)/g,""); 
+1

'[]'裏面的字符不需要反斜槓,不是嗎? – 2012-03-05 15:08:51

+0

哈比人的力量我想。 – 2012-03-05 19:23:26

2

只需使用一個替代方案,即分隔每個正則表達式您可以通過交替操作|之前有:

catalogue|20%|[/:] 

還要注意,你不能以你在那裏完成的方式來組合字符類和字符串。以上幼稚的組合作品以及除此之外的所有內容都可能是優化的(即使在這種情況下無法進一步優化) - 但只有在您不更改正則表達式描述的語言時纔有效。

1
var string = 'rem:ove20%the/word:catalogue20%now'; 

string.replace(/([:/]|20%|catalogue)/g, ''); 
2

你似乎有一個錯字那裏(\c),你也不想20%的字符類中(你應該逃避斜線)。您還需要去掉字邊界,如果你想允許catalogue20%匹配 - 有catalogue20之間沒有邊界,因此\b失敗:

string.replace(/catalogue|20%|[\/:]/g, ""); 
0

\b引用單詞邊界,但您的單詞目錄與其他單詞混合使用。所以,你的正則表達式應該是:

string.replace(/catalogue|[\/20%:]/g, ""); 

也不要逃避/\/

+0

我讀過,你不需要逃避/如果它在字符的開始或結尾,這是在這種情況下[/:20%] – patad 2012-03-05 14:51:11

0
string.replace(/catalogue|20%|[/:]/g, '') 
+0

爲什麼你更喜歡用括號括起單詞? (目錄)|(20%)和目錄| 20%似乎工作.. – patad 2012-03-05 15:14:42