2011-11-25 11 views
0

JavaScriptでUnicode文字の文字列リテラルを検出するこの正規表現が見つかりました。文字列を検出するための正規表現の理解

'"'("\\x"[a-fA-F0-9]{2}|"\\u"[a-fA-F0-9]{4}|"\\"[^xu]|[^"\n\\])*'"' 

が、私は

    の役割と必要性を理解することができませんでし
  1. "\\x"[a-fA-F0-9]{2}

  2. "\\"[^xu]|[^"\n\\]

私の推測では、約1)、それはコントロールを検出していることである

文字。

+0

こんにちはRohitと歓迎StackOverflow!あなたの質問を編集して元の正規表現をそのまま貼り付け、 '{}'(コード)ボタンを使ってコードとして書式を設定する必要があると思います。バックスラッシュを自分で挿入してマークダウンパーサーを推測しようとすると、私たちがあなたを助けてくれることになります。また、あなたの正規表現でそれらの引用符について何か間違って見える。この質問は残念なことに、現在の状態ではほとんど答えることができません。このページの右上にあるよくある質問を読むこともできます。それはあなたを始めるのを助けるかもしれません。 –

+0

@TimPietzckerが提案してくれてありがとう、私は元の質問を編集しました。 私はそれらを個別に理解しますが、組み合わせて、私を混乱させています。 – Rohit

+0

これらの引用符はすべて実際に元の正規表現にありますか?私はそれを非常に疑う。 –

答えて

1
"\\x"[a-fA-F0-9]{2} 

これは、リテラル\xに続いて、16進数のグループから2文字です。

コードポイント0-255,\x00-の短縮形文字エスケープに一致します。これらはJavaScriptの文字列リテラルで有効ですが、代わりに\u0000 - \u00FFを使用する必要があるJSONにはありません。 xまたはuを除いて、1つの以上の文字が続く

  1. バックスラッシュ:

    "\\"[^xu]|[^"{esc}\n] 
    

    これは、のいずれかに一致します。 \xNN\uNNNNの有効なケースは、前の|-separate句で取得されました。これは、\uqXのような無効な構文とのマッチングを避けるためです。

  2. "または改行を除くすべてのもの。他のエスケープ文字を除外することになっている可能性もありますが、これは私が推測しているのは{esc}という意味です。これは正規表現の構文の一部ではありませんが、拡張正規表現や正規表現の上部にあるテンプレートにすることができます。そうでない場合、[^"{esc}\n]は、",{,e,s,c,}または改行以外の文字を意味します。これは間違っています。

特に、「何か」を取り上げ、最後の句は、\自体を排除するものではない、あなたはまだそれが両方JSONで無効であっても、あなたの文字列に\uqXを持っているし、試合を得ることができるようにし、 JavaScript。

+0

'{esc}'は、コードの書式設定を使用していなかったため、バックスラッシュが表示されないため、OPが行ったように見えます。私はバックスラッシュを彼らが所属するところに戻します。 –

関連する問題