除了0-9 + - / *和^之外,删除任何字符

4

我试图进一步了解JavaScript中的正则表达式。

所以我有一个表单,允许用户提供任何字符串。我想取出这个字符串并去除任何不是数字、括号、+、-、*、/或^的字符。我正在尝试编写否定正则表达式来捕获任何无效的内容并将其删除。到目前为止,与此问题相关的代码如下:

var pattern = /[^-\+\(\)\*\/\^0-9]*/g;
function validate (form) {
    var string = form.input.value;
    string.replace(pattern, '');
    alert(string);
};

这个正则表达式在http://www.infobyip.com/regularexpressioncalculator.php正则表达式测试器上可以正常工作,但是在计算器中始终以我提供的确切字符串警报,而不进行任何更改。非常感谢您提供任何建议或指针。

3
在字符集内部,您不需要对所有内容进行转义:/[^-+()^*\/0-9]/g - Blender
@Blender:<del>在正则表达式中,您确实需要转义该正斜杠。</del>(虽然我想这可能是为了清晰起见,但 ^ 也不需要转义。) - Ry-
1
@minitech:奇怪的是,这并没有困扰JS正则表达式引擎。谢谢。 - Blender
1
@minitech:其实我也在想同样的问题,但我在Chrome中尝试了一下,没有进行任何转义,它完全正常工作。 - Mark Byers
@MarkByers:真的吗?想不到啊,我还以为这只是VIM的问题。我猜JavaScript的正则表达式比它们表现出来的要聪明 :) - Ry-
1个回答

10

replace 方法不会修改原字符串。它会创建一个新的字符串,带有替换后的结果并返回。您需要将替换后的结果重新赋值给变量:

替换方法 replace 不会修改原始字符串,它会返回一个包含替换后结果的新字符串。如果想要修改原始字符串,需要将替换后的结果赋值给原始字符串的变量。

string = string.replace(pattern, '');

2
哇,谢谢你。我太专注于正则表达式了,错过了显而易见的事情。 - zdombie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接