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

Utk*_*maz 0 javascript regex replace

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

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

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

prints (55) 555555
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/Yb2yV/

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

T.J*_*der 5

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

如果你的目标是摆脱所有的(,),-,和空格字符,你可以用一个字符类与交替(例如,二选一)联合做\s,它的全称是"白色小号步伐":

document.write($("#a").val().replace(/[()\-]|\s/g,''));?
Run Code Online (Sandbox Code Playgroud)

(我没有在前面添加反斜杠,()因为你不需要在一个字符类中.我确实把一个放在了前面,-因为在一个字符类中,-有特殊意义.)

或者,如果你想摆脱任何不是数字的东西,你可以使用\D:

document.write($("#a").val().replace(/\D/g,''));?
Run Code Online (Sandbox Code Playgroud)

\D意思是"不是数字"(注意它是一个大写\d字母,小写字母是相反的[任何数字]).

有关正则表达式MDN页面的更多信息.