2012-03-05 98 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