javascript replace()函数与regexp的奇怪行为

时间:2012-06-05 14:55:32

标签: javascript regex replace

我做错了还是JS替换有问题?

<input type="text" id="a" value="(55) 55-55-55" />​

document.write($("#a").val().replace(/()-/g,''));​

prints (55) 555555

http://jsfiddle.net/Yb2yV/

我怎么能替换()和空格呢?

7 个答案:

答案 0 :(得分:5)

在JavaScript正则表达式中,()字符具有特殊含义。如果你想按字面意思列出它们,请在它们前面放一个反斜杠(\)。

如果你的目标是摆脱所有()-和空格字符,你可以使用字符类结合替换(例如, { - 1}}上的“或 - ”,代表“white s pace”:

\s

(我没有在document.write($("#a").val().replace(/[()\-]|\s/g,''));​ 前面添加反斜杠,因为你不需要在一个字符类中。我确实把一个放在()前面,因为在一个字符类中, -具有特殊含义。)

或者,如果你想摆脱不是数字的 任何 ,你可以使用-

\D

document.write($("#a").val().replace(/\D/g,''));​ 表示“不是数字”(请注意,它是一个大写,小写的\D是相反的[任何数字])。

有关MDN page on regular expressions的更多信息。

答案 1 :(得分:3)

您需要使用字符类

/[-() ]/

使用"-"作为第一个字符可以解决歧义,因为短划线通常用于范围(例如[a-zA-Z0-9])。

答案 2 :(得分:0)

document.write($("#a").val().replace(/[\s()-]/g,''));​

这将删除所有空格(\ s),parens和破折号

答案 3 :(得分:0)

括号表示正则表达式中的capturing group。您需要转义它们(/\(\)-/)以匹配序列“() - ”。但我想你想使用character class,即一个匹配“(”,“)”或“ - ”的表达式;对于空格包括\s shorthand

value.replace(/[()-\s]/g, "");

您可能需要阅读一些documentationtutorial

答案 4 :(得分:0)

使用此

.replace(/\(|\)|-| /g,'')

您必须转义括号(即\(而不是()。在正则表达式中,您希望列出四个项目:\(\),' - '和(空格)以及您想要替换任何其中不仅仅是一串四个,你必须在它们之间使用OR |

答案 5 :(得分:0)

您想要匹配集合中的任何字符,因此您应该使用方括号来创建字符集:

document.write($("#a").val().replace(/[()\- ]/g,''));

通常情况下,括号在正则表达式中有special meaning,因此在正则表达式中忽略它们,只留下破折号。通常,要获得字面括号,您需要使用\来转义它们(但在方括号块中,如上所述,您没有)。

上面的破折号是转义的,因为它通常表示字符集中的范围,例如[a-z]

答案 6 :(得分:0)

可能非常糟糕,但非常基本的方法是,

document.write($("#a").val().replace(/(\()|(\))|-| |/g,''));​​

|表示OR\用于转义保留符号