どもです。
jsの正規表現で、変数を使用したい場合。
var regexp = new RegExp(正規表現文, 'g');
var result = target.match(regexp)
これで良いはずです。
が、
.match()を使ったとき、本来は括弧でグループ化したところが、
配列になって返ってくるはずなのに。
result[0]しかないよーおっかしーなー!
結論からいうと、余分なフラグが立っていた
× var regexp = new RegExp(正規表現文, 'g');
○ var regexp = new RegExp(正規表現文);
RegExpを解説するサイト様が、どこもかしこも'g'つけてるものだから、
なんか'g'つけるのが当たり前みたいに思ってたけど、この'g'って、
/正規表現/g
のgなのだから、要らないなら付けない方がいいんだよな!
…
っていうか、このgってなんぞや?
置換するときには使いたいやつ #グローバルマッチ
軽く調べただけだと、「グローバルマッチ」「繰り返しマッチングを行う」などの言葉しか出てこなかったので、きちんと調べてみる。
# 最初のaaだけが置換される
"aabbaabb".replace(/aa/, "cc")
# => 'ccbbaabb'# すべてのaaが置換される
"aabbaabb".replace(/aa/g, "cc")
# => 'ccbbccbb'
アッ。
そーゆーやつか。
こいつを.match()に使うと配列が返ってこなくなる理由は、
調べた限りでは見つけられませんでしたが、
複数回マッチするのであれば、配列の大きさが対象によって変化してしまい、
結局、思った通りの処理ができない可能性が高いですね。
教訓
引数の意味は逐一調べた方が良いね。