質問: text.match(regex); console.log(matched[0]); ``` このコードの場合、textはセミコロンで終わっていないため、一致するものがなくmatchedがnullになると思ったのですが、プログラムの実行が完了しません。 何故このようなことになるのか、教えて頂けないでしょうか? よろしくお願い致します。
回答: **組み合わせ爆発**が起っているのでしょう。 ``` regex = /(\w+(,|\s)*)+;/ ``` で `;` の有無で `null` になるはずということですが、regex 表現の最後尾にあるため、コンピューターは、その前の `(\w+(,|\s)*)+` の部分のパターンを作ってから最後に `;` を付けたパータンを考え、そこで初めて与えられた文字列にマッチするかしないかを、律儀に全パターンを作って試して行きます。 特に、`(,|\s)*` で単語区切りがあってもなくてもどちらでもいいような表現になってしまっているのも組み合わせ爆発の一因だと思います。`(,|\s)+` とすれば、必ず `XXXX,` 毎に部分的マッチが確定します。なので、自分なら、こうしますかね: ``` let regex = /(\w+(,|\s)+)+(\w+);/; ``` ideone で試した分には、null で無事終了しました。