2011-06-03 77 views
1

不知道我在哪里做错了。我有一个字符串,如测试(123x),我试图找到(123x)和用什么替代它:JavaScript RegExp替换

这里是我的代码

<script type="text/javascript"> 
    var original = "Test (1x)"; 
    var newString = original.replace(new RegExp("\(\d{1,6}[x]{1}\)",original),""); 
    console.log(newString); 
</script> 

我已经测试了正则表达式和它匹配但是,当我登录到控制台时,它不会用“”代替(1x)“”

+0

您可能想要使用正则表达式语法来缩短代码:'original.replace(/ \(\ d {1,6} [x] {1} \)/,“”)' – NT3RP 2011-06-03 16:40:07

回答

10

你应该尽可能使用正则表达式文字:

var original = "Test (1x)"; 
var newString = original.replace(/\(\d{1,6}[x]{1}\)/,""); 

您试图为"\(\d{1,6}[x]{1}\)"失败被解释为"(d{1,6}[x]{1})"\‍被简单地剥离为未知的转义序列)。你需要躲避\还有:

new RegExp("\\(\\d{1,6}[x]{1}\\)",original) 

除此之外,对于正则表达式构造函数的第二个参数是标志(g =全局替换,i =不区分大小写,等等)。

1

original传递给RegExp是错误的。您还可以逃避字符串中的每一个斜杠(使之产生一个斜杠正则表达式)作为\是JS的字符串转义字符:

original.replace(new RegExp("\\(\\d{1,6}[x]{1}\\)"),""); 

注意[x]{1}是一样的直接写入x

你也可以使用一个正则表达式字面

/\(\d{1,6}x\)/ 
+0

有道理,因为替换被称为原来的,但这仍然记录测试(1x) – Neil 2011-06-03 16:42:54

+0

@尼尔:你没有阅读我的答案的最新版本:) – 2011-06-03 16:43:55