PHP の preg_match_all 関数は、Qiita に投稿した記事のとおり、結果として返される配列の 1 番目の要素にキャプチャの結果が格納されます。これを Javascript でやろうと思ったのですが、苦戦しました。
結論としては、PHP の preg_match_all 関数のように、1 回実行してすぐに結果を得ることができないため、下記のように while 構文を使って繰り返し実行する必要がありました。
下記のコードは、規則的なテキストから、li タグの中身のテキストだけを配列として抜き出すコードです。
1 2 3 4 5 6 7 8 9 10 11 |
var text = '<ul><li>hoge01</li><li>hoge02</li><li>hoge03</li></ul>'; var regexp = /<li>(.*?)<\/li>/g; var result; var results = []; while(result = regexp.exec(text)){ results.push(result[1]); } console.log(results); // 実行結果 => ["hoge01", "hoge02", "hoge03"] |
6 行目
Javascript では 1 回の実行でキャプチャした部分を全て取得できないため、正規表現オブジェクトの exec メソッドが false を返すまで繰り返し実行します。 exec メソッドは 1 回実行すると、どこまで検索を行ったのか位置を覚えていてくれるようで、次に実行した時に、その位置から検索を開始してくれます。なお、この動作を実現するためには正規表現に g フラグが必要でした。(2 行目の末尾あたりに書いている g という文字がそれです。)
7 行目
exec メソッドによってキャプチャされた結果は配列として返され、1 番目の要素に格納されています。