私はしばらく前にこの質問を投稿しましたが、それはよく答えられました: 文字列を分割するための複雑な正規表現
私はそれに関連する新しい難問があることを知っています、そして私は本当にどこにも行きません...
次のような文字列があるとします。
{foo.bar:/?a{3\}}{blah}
前の投稿で提供されたコードを使用して、これを行います:
{foo.bar:/?a
{3\}}
{blah}
私はそれがこれをしたい:
{foo.bar:/?a{3\}}
{blah}
これは、例の2番目の中括弧の前にエスケープがない文字列を処理する必要があるためです。特定の開始中括弧を無視するタイミングを見つけることができるコードが必要です。例えば。文字列を左から右に読むと、最初のオープニングカーリーブレースが表示され、2番目のオープニングカーリーブレースが表示されると、「ちょっと待ってください」と表示されます。有効なクロージングカーリーブレースはまだ表示されていないので、これを無視してください。これは可能ですか?純粋な正規表現を使用しても完全には不可能な場合があることを理解しています。
これは、問題を引き起こしている前の質問から使用しているコードの最初の部分です。
var m = str.match(/{?(\\.|[^{}])+}?/g);
または、別の解決策として、ユーザーが事前に文字列を入力して送信しているときに、ユーザーに表示されずにエスケープするバックスラッシュを挿入することもできます。これに伴う問題は、どのエスケープバックスラッシュをユーザーから再び「非表示」にするかを知ることです...