6854


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

[code]

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

求める出力結果としては、["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`オプションを使います。

[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]

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


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 を使う方法を紹介しておきます。

[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()`
をループで回してそれを配列に詰め込めば、大括弧なしの文字列を取得できます。長くなってしまうのが玉に瑕な感じですが、参考まで。


CC BY-SA 3.0
2015-02-21T03:39:21.083
6854
2015-02-21T03:39:21.083
208
6849
answer


既に解決されていますが、`split()` を使う方法もあります。

[code]

    'a[hogehoge] b[fugafuga] c[piyopiyo]'
      .split(/^[^\[]*\[|\][^\[\]]*\[|\][^\]]*$/)
      .slice(1,-1);
    => hogehoge, fugafuga, piyopiyo
    
[/code]


CC BY-SA 3.0
2015-02-21T03:44:17.500
6856
2015-02-21T03:44:17.500
6849
answer