"test"
二重引用符で囲まれた部分文字列を見つける必要があり"te\"st"
ます。これを達成するには、次の方法で行うのが最善の方法です""
"""
1) /".*"/g
2) /"[^"\\]*(?:\\[\S\s][^"\\]*)*"/g
3) /"(?:\\?[\S\s])*?"/g
4) /"([^"\\]*("|\\[\S\s]))+/g
昨日の面接でこの質問をされたのですが、今後の参考のために答えを知りたいです。
"test"
二重引用符で囲まれた部分文字列を見つける必要があり"te\"st"
ます。これを達成するには、次の方法で行うのが最善の方法です""
"""
1) /".*"/g
2) /"[^"\\]*(?:\\[\S\s][^"\\]*)*"/g
3) /"(?:\\?[\S\s])*?"/g
4) /"([^"\\]*("|\\[\S\s]))+/g
昨日の面接でこの質問をされたのですが、今後の参考のために答えを知りたいです。
これらの式は次のように評価されます。
式 1 は次のように一致します。
これは に一致する"test" some wrong text "text"
ため、失敗します
式 2 は次のように一致します。
したがって、これは、スラッシュで区切られた、逆コンマ内のすべての文字をセットで収集します。後続のセットにスラッシュを含めることにより、前にスラッシュがある場合、逆コンマを明示的に除外します。これは機能します。
式 3 は次のように一致します。
これはすべての文字を収集し、オプションで前にスラッシュを付けますが、貪欲ではありません。これはうまくいきます
式 4 は次のように一致します。
これは に一致する"test"\x
ため、失敗します
結論:
私が知る限り、式 2 と 3 の両方が機能します。私は何かを見逃しているかもしれませんが、両方とも、与えられた例では確かに機能します (または適切ではありません)。そこで問題は、どちらが優れているかということです。簡単なので、3つに投票します。
あなたの文法は少し不明確です。DQ [DQ または \DQ 以外のすべて]* DQ という形式のすべての文字列を検索すると仮定します。
このための正規表現/"([^"\\\\]|\\\\"|\\\\[^"])*"/g