8

"test"二重引用符で囲まれた部分文字列を見つける必要があり"te\"st"ます。これを達成するには、次の方法で行うのが最善の方法です"""""

1) /".*"/g
2) /"[^"\\]*(?:\\[\S\s][^"\\]*)*"/g
3) /"(?:\\?[\S\s])*?"/g
4) /"([^"\\]*("|\\[\S\s]))+/g

昨日の面接でこの質問をされたのですが、今後の参考のために答えを知りたいです。

4

3 に答える 3

2

これらの式は次のように評価されます。

式 1 は次のように一致します。

  • 逆コンマ
  • 逆コンマやスラッシュを含む任意の文字を貪欲に
  • 最後の逆コンマ。

これは に一致する"test" some wrong text "text"ため、失敗します

式 2 は次のように一致します。

  • 逆コンマ
  • 逆コンマでもスラッシュでもない、できるだけ多くの文字
  • 貪欲に何セットも
    • スラッシュが前にある任意の文字
    • 逆コンマでもスラッシュでもない、できるだけ多くの文字
  • 最後の逆コンマ

したがって、これは、スラッシュで区切られた、逆コンマ内のすべての文字をセットで収集します。後続のセットにスラッシュを含めることにより、前にスラッシュがある場合、逆コンマを明示的に除外します。これは機能します。

式 3 は次のように一致します。

  • 逆コンマ
  • 以下に適合する数のセット:
    • オプションのスラッシュが前にある任意の 1 文字
  • 最後の逆コンマ

これはすべての文字を収集し、オプションで前にスラッシュを付けますが、貪欲ではありません。これはうまくいきます

式 4 は次のように一致します。

  • 逆コンマ
  • 逆コンマでもスラッシュでもないすべての文字を貪欲に
  • 以下の 1 つ以上:
    • 逆コンマまたは
    • スラッシュと任意の文字

これは に一致する"test"\xため、失敗します

結論:

私が知る限り、式 2 と 3 の両方が機能します。私は何かを見逃しているかもしれませんが、両方とも、与えられた例では確かに機能します (または適切ではありません)。そこで問題は、どちらが優れているかということです。簡単なので、3つに投票します。

于 2013-03-14T09:15:23.800 に答える
0

あなたの文法は少し不明確です。DQ [DQ または \DQ 以外のすべて]* DQ という形式のすべての文字列を検索すると仮定します。

このための正規表現/"([^"\\\\]|\\\\"|\\\\[^"])*"/g

于 2013-03-14T08:56:13.153 に答える