2017-05-17 8 views
1

与えられた文字列の中で、どの正規表現が中括弧内の両方の部分文字列にマッチしますか?JavaScript Regex複数のインスタンスを一致させる

var string = "{name: Jackie} works at {company: Google}"; 

私はstring.match(/{.*}/gi)を使用してみましたが、それは試合のように文字列全体を返します。

Array [ "{name: Jackie} works at {company: Google}" ] 

予想される出力:

Array [ "{name: Jackie}", "{company: Google}" ] 

答えて

2

あなたの表現で?を逃しました。あなたの正規表現({.*})の問題は、{と一致し、次に最後の出現までは}となります。 .*は貪欲で、?{.*?}で、怠け者になっています。

Regex demo

正規表現:/{.*?}/g

{.*?}これはすべて}

+0

ああ、ありがとう!それは私を許可するときに受け入れます。 – railsuser400

1

の最初の発生まで、次に{と一致する{一致します{*}文字列の最後まで、最後に最後まで} 。だから最初の{最後から最後まで}と一致します。 ?マルチマッチを最初の{から次へ}にするようにしますが、{}からの1ステップごとにマッチしようとします。そして、失敗ごとに少し後戻りするので、さらに多くの作業が行われます。すべてをNOTと一致させることによって({[^\}]*}のように)、まったく同じことにマッチしますが、バックトラッキングは一切ありません。あなたが欲しいものを正確に一致させるのが常に良いので、一致するものに驚かないようにしてください。 (。*?}は一致しないため}、試してもしないでください)

関連する問題