18

[^a]、以外の文字を意味しますaが、[^](後続の文字なしで)はどういう意味ですか?-のような場合に文字範囲の意味が失われるのと同じように[-]、私はそれ[^]がキャレットと一致すると思いました。私はこの問題のデバッグに非常に長い時間を費やしましたが、少なくともChrome 19では、それが何にでも一致するように見えること、つまり、と同等であることがわかりました.。ここに適用できる仕様はありますか、または期待される動作は何ですか?

はい、私は使用できること、そしておそらく使用する必要があることを認識しています[\^]。この質問は、病的な好奇心の性質にあります。

4

3 に答える 3

30

JavaScript仕様(ES3およびES5)によると、、、(他のコードとは異なり、バックトラックに依存します)などと[^]同じよう[\s\S][\0-\uffff]、任意の単一のコードユニットに一致します。との違いは、ドットがないことです。 t 4つの改行コードポイント(、、、、および)に一致します。(.|\s).\r\n\u2028\u2029

[^]またはを使用することはお勧めしませ[]ん。クロスブラウザでは一貫して機能せず、正規表現が他のプログラミング言語で機能しなくなるためです。IE <= 8以前のバージョンのSafariは、空の文字クラスに対して従来の(JavaScript以外の)正規表現の動作を使用します。古いバージョンのOperaは、正しいJavaScriptの動作を逆にするため、[]どのコードユニットとも一致し、一致する[^]ことはありません。従来の正規表現の動作では]、文字クラス内でエスケープされていない先頭はリテラル文字として扱われ、文字クラスを終了しません。

XRegExpライブラリを使用し、[]正しく[^]一貫してクロスブラウザで動作する場合。XRegExpは、ドットを任意のコード単位に一致させる(別名dotallまたはsingleline)フラグも追加します(JavaScript仕様に正しく準拠しているブラウザーsの場合と同じ[^]です)。

于 2012-06-01T02:29:08.180 に答える
2

カレット^には多くの意味があります-正規表現構文のほとんどの文字と同様です。さらに、すべてのキャラクターはコンテキストに大きく依存します。さらに複雑なことに、一部の文字と構文は、基盤となるエンジン(Perl、Java)に依存しています。

バラバラにしましょう[^]

[]キャラクタークラスです。

[^それは:

文字クラスの否定。文字クラスにリストされていない文字と一致します。

文字クラスに文字を定義していません。したがって、動作は未定義です。つまり、否定するものは何もないので、にでも一致します。

于 2012-06-01T01:49:32.150 に答える
1

意味は、続くものの否定です。したがって、ここでは何も続きません。

何もない=すべて

ただし、他のほとんどのRegExエンジンは、式でエラーをスローします。

  • ereg(): REG_EBRACK
  • preg_match(): Compilation failed: missing terminating ]
于 2012-06-01T01:48:38.703 に答える