1. ホーム
  2. javascript

[解決済み] Javascript + Regex = エラーを繰り返すことはない?

2022-02-01 05:01:15

質問

私はREGEXの初心者ですが、REGEXを学んで自分のスキルのレパートリーに加えられるかどうか、新しいプロジェクトの1つに取り入れようとしています。しかし、私はここで障害にぶつかっています。

ユーザーの入力に不正な文字が含まれていないかどうかを、ユーザーインターフェースの .search という関数があります。

if (name.search("[\[\]\?\*\+\|\{\}\\\(\)\@\.\n\r]") != -1) {
    ...
}

しかし、この行が含まれている関数を実行しようとすると、その特定の行に対して次のようなエラーが投げられます。

Uncaught SyntaxError: Invalid regular expression: /[[]?*+|{}\()@.

]/: Nothing to repeat

私のコードのどこが問題なのか、どうしてもわかりません。どなたか正しい方向を示していただけませんか?

解決方法は?

正規表現の特殊文字をエスケープするために使用されるバックスラッシュを2重にする必要があります。 しかし、@Bohemianが指摘するように、これらのバックスラッシュのほとんどは必要ありません。 残念ながら、彼の回答はあなたの回答と同じ問題を抱えています。 あなたが実際に望んでいるのは

バックスラッシュは、正規表現パーサーに渡されるのではなく、文字列を読み取るコードによって解釈されます。 あなたが欲しいのは

"[\\[\\]?*+|{}\\\\()@.\n\r]"

バックスラッシュが4つになっていることに注意してください。 これは間違いなく必要です。 正規表現コンパイラに渡される文字列は、@Bohemian の文字列と同じであり、正しく動作します。