RegEx(在JavaScript中查找/替换) - 匹配非字母数字字符但忽略 - 和+

时间:2010-07-05 08:23:10

标签: javascript regex alphanumeric non-alphanumeric

我们一直在使用以下js / regex来查找和替换除 - 和+

之外的所有非字母数字字符
outputString = outputString.replace(/[^\w|^\+|^-]*/g, "");

然而,它并不完全有效 - 它不会取代^和|字符。我不禁想知道这是否与^和|有关在正则表达式中用作元字符。

我尝试过切换使用[\W|^+|^-],但这取代了 - 和+。我认为可能是一个先行断言可能是答案,但我不太确定如何实现它们。

有没有人知道如何做到这一点?

1 个答案:

答案 0 :(得分:16)

字符类不做交替,因此|是文字的,^必须在类的开头才能生效(否则它会被字面处理。)

使用此:

[^\w+-]+

(另外,如果-不是最后一个,则需要在字符类中将其转义为\- - 所以如果可能会在例外列表中添加更多字符,请小心。)

您也可以使用这样的负向前瞻:

(?![+-])\W

注意:您不希望在*之后使用+\W,因为前瞻仅适用于紧随其后的字符(并且g标志使替换重复直到完成。)

另请注意,\w\W会将_视为单词字符。如果不需要,那么替换它可以使用(?![+-])[\W_](或在第一个表达式中使用显式范围)。