2010-07-05 37 views
11

我們一直在使用下面的JS /正則表達式查找和除了替換所有非字母數字字符 - 和+正則表達式(在JavaScript中查找/替換) - 匹配非字母數字字符,但忽略了 - 和+

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

然而,它不能完全工作 - 它不會取代^和|字符。我不禁想知道這是否與^和|有關被用作正則表達式本身的元字符。

我試過切換到使用[\W|^+|^-],但是它取代了 - 和+。我認爲可能是前瞻斷言可能是答案,但我不確定如何實現它們。

有沒有人有想法如何做到這一點?

回答

16

字符類不做交替,因此爲什麼|是文字,而^必須在類生效的開始(否則它字面上的處理。)

使用此:

[^\w+-]+ 

(此外,如果-不是最後一個,則需要在字符類中以\-的方式轉義 - 如果要將更多字符添加到例外列表中,請小心)。

你也可以用這樣的負先行做到這一點:

(?![+-])\W 

注意:您不希望\W*+,因爲先行只適用於緊隨其後的字符(並且g標誌使替換重複,直到完成)。

另請注意,\w\W認爲_作爲單詞字符。如果不需要那麼替換,你可以使用(?![+-])[\W_](或在第一個表達式中使用明確的範圍)。

+0

嗨,彼得,謝謝 - 太好了。 [^\w+-]+工作得很好!並感謝您提供更多信息 - 非常有幫助。 – 2010-07-05 09:17:00

相關問題