JavaScript正規表現でマッチした全ての値を配列で取得する


JavaScriptで下記データから大括弧[]内のデータだけ、抜き出す良い方法を教えてください。

[code]

    a[hogehoge] b[fugafuga] c[piyopiyo]
    
[/code]

求める出力結果としては、["hogehoge", "fugafuga", "piyopiyo"] になります。




別回答のコメントより

> 大括弧[ ]なしで出力する方法はどうすれば

ということなので、capture を使う方法を紹介しておきます。

[code]

    var s = 'a[hogehoge] b[fugafuga] c[piyopiyo]';
    var r = /\[([^\]]*)\]/g;
    
    var a = [];
    while ((m = r.exec(s)) != null) {
      a.push(m[1]);
    }
    
    console.log(a);
    
[/code]

このように正規表現内に `()` を追加してキャプチャした上で、 `exec()`
をループで回してそれを配列に詰め込めば、大括弧なしの文字列を取得できます。長くなってしまうのが玉に瑕な感じですが、参考まで。




配列を得るには`/g`オプションを使います。

[code]

    'a[hogehoge] b[fugafuga] c[piyopiyo]'.match(/\[[^\]]*\]/g)
    // ["[hogehoge]", "[fugafuga]", "[piyopiyo]"]
    
[/code]

上記の結果には[]が含まれてしまいますが、JavaScriptでは正規表現の後読みがサポートされていないため先頭の[が除去できません。(後ろの]は`(?=\\])`で対処できます。)

なので`Array.prototype.map`を使用して

[code]

    'a[hogehoge] b[fugafuga] c[piyopiyo]'
         .match(/\[[^\]]*\]/g)
         .map(function(s)s.substring(1, s.length - 1))
    
[/code]

と後処理を加えてやればよいと思います。

