web-dev-qa-db-ja.com

正規表現文字列置換

私は正規表現を使用して基本的な文字列の置換を試みていますが、私が見つけた答えは役に立たないようです-彼らはほとんどまたはまったく説明なしで各人の固有の要件に直接答えています。

現在、str = str.replace(/[^a-z0-9+]/g, '');を使用しています。しかし、私がやりたいのは、すべての英数字(a〜zおよび0〜9)と「-」文字を許可することです。

これに答えて、式を連結する方法を説明してください。

19
Patrick

これは動作するはずです:

str = str.replace(/[^a-z0-9-]/g, '');

間のすべてがあなたが探しているものを示します

  1. /はパターンを区切るためにここにあるので、開始するものと終了するものがあります
  2. []は、特定の1文字で探しているパターンを示します
  3. ^は、後続の文字に対応しないすべての文字が必要であることを示します
  4. a-zは、含まれる「a」と「z」の間の任意の文字に一致します
  5. 0-9は、含まれる「0」から「9」までの任意の数字と一致します(任意の数字を意味します)
  6. - '-'文字
  7. 末尾のgは、パターンに一致する最初の文字で正規表現を停止せず、文字列全体で続行することを示す特別なパラメーターです。

次に、式は前後の/で区切られます。したがって、ここでは、「文字ではないすべての文字、数字、または「-」が文字列から削除される」と言います。

35
koopajah

単に+から-

str = str.replace(/[^a-z0-9-]/g, "");

次のように読むことができます。

  1. [^ ]:セットのNOTと一致
  2. [^a-z0-9-]:一致しない場合a-z0-9または-
  3. / /g:グローバルマッチを行います

詳細情報:

7
VisioN

あなたのキャラクタークラス(角括弧内の部分)は、0-9とa-zと+以外をマッチさせたいと言っています。一致させるa-zまたは0-9の数については明確ではありませんが、+は、少なくとも1つの英数字の文字列を置換することを意味すると想定しています。代わりに読む必要があります:

str = str.replace(/[^-a-z0-9]+/g, "");

また、大文字と小文字を一致させる必要がある場合は、次を使用する必要があります。

str = str.replace(/[^-a-zA-Z0-9]+/g, "");
1
Samuel