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

```

    a[hogehoge] b[fugafuga] c[piyopiyo]
    
```

求める出力結果としては、["hogehoge", "fugafuga", "piyopiyo"] になります。
CC BY-SA 3.0
2015-02-21T02:33:50.227
6849
2015-02-21T17:13:14.213
2015-02-21T17:13:14.213
8000
7461
question
javascript 正規表現
JavaScript正規表現でマッチした全ての値を配列で取得する
配列を得るには`/g`オプションを使います。

```

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

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

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

```

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

と後処理を加えてやればよいと思います。
CC BY-SA 3.0
2015-02-21T02:44:23.330
6850
2015-02-21T03:00:21.793
2015-02-21T03:00:21.793
5750
5750
6849
answer
別回答のコメントより

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

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

```

    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);
    
```

このように正規表現内に `()` を追加してキャプチャした上で、 `exec()`
をループで回してそれを配列に詰め込めば、大括弧なしの文字列を取得できます。長くなってしまうのが玉に瑕な感じですが、参考まで。
CC BY-SA 3.0
2015-02-21T03:39:21.083
6854
2015-02-21T03:39:21.083
208
6849
answer
既に解決されていますが、`split()` を使う方法もあります。

```

    'a[hogehoge] b[fugafuga] c[piyopiyo]'
      .split(/^[^\[]*\[|\][^\[\]]*\[|\][^\]]*$/)
      .slice(1,-1);
    => hogehoge, fugafuga, piyopiyo
    
```
CC BY-SA 3.0
2015-02-21T03:44:17.500
6856
2015-02-21T03:44:17.500
6849
answer