11

次の js/regex を使用して、- と + を除くすべての英数字以外の文字を検索して置換しています。

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

ただし、完全に機能するわけではありません。^ と​​ | を置き換えるものではありません。文字。これは ^ と | に関係があるのではないかと思わずにはいられません。正規表現自体でメタ文字として使用されています。

を使用するように切り替えてみまし[\W|^+|^-]たが、それは - と + を置き換えます。おそらく先読みアサーションが答えかもしれないと思いましたが、それらを実装する方法がよくわかりません。

これを達成する方法を知っている人はいますか?

4

1 に答える 1

16

文字クラスは交代を行わないため、|はリテラルであり、^有効にするにはクラスの先頭にある必要があります(そうでない場合は、リテラルとして扱われます)。

これを使って:

[^\w+-]+

(また、-が最後でない場合は\-、文字クラス内のようにエスケープする必要があります。したがって、例外リストにさらに文字が追加される可能性がある場合は注意してください)。

次のようなネガティブな先読みでそれを行うこともできます。

(?![+-])\W

注:先読みは直後の文字にのみ適用されるため、*または+その後は必要ありません(フラグにより​​、完了するまで置換が繰り返されます)。\Wg

また、それに注意して、単語の文字\w\W見なしてください。_それが望ましくない場合は、使用できるものを置き換える(?![+-])[\W_](または最初の式で明示的な範囲を使用する)。

于 2010-07-05T08:27:08.480 に答える