我做错了还是JS替换有问题?
<input type="text" id="a" value="(55) 55-55-55" />
document.write($("#a").val().replace(/()-/g,''));
prints (55) 555555
我怎么能替换()和空格呢?
答案 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, "");
您可能需要阅读一些documentation或tutorial。
答案 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
,
\
用于转义保留符号