11

我们一直在使用以下 js/regex 来查找和替换除 - 和 + 之外的所有非字母数字字符

outputString = outputString.replace(/[^\w|^\+|^-]*/g, "");

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

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

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

4

1 回答 1

16

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

用这个:

[^\w+-]+

(另外,如果-不是最后一个,它需要像\-在字符类中一样被转义——所以如果有更多的字符可能被添加到异常列表中,请小心)。

您也可以像这样使用负前瞻来做到这一点:

(?![+-])\W

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

另请注意,\w并将其\W视为_单词字符。如果不希望这样做,则可以替换它(?![+-])[\W_](或在第一个表达式中使用显式范围)。

于 2010-07-05T08:27:08.480 回答