ど素人から毛を生やす。<延>

変数.match()でも配列を取得したい!

Web > javascript 2017年10月20日(最終更新:6年前)

2017年10月20日に作成されたページです。
情報が古かったり、僕が今以上のど素人だった頃の記事だったりする可能性があります。

どもです。

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'

CoffeeScript関連資料[正規表現リファレンス(CoffeeScript)]

アッ。
そーゆーやつか。

こいつを.match()に使うと配列が返ってこなくなる理由は、
調べた限りでは見つけられませんでしたが、
複数回マッチするのであれば、配列の大きさが対象によって変化してしまい、
結局、思った通りの処理ができない可能性が高いですね。

教訓

引数の意味は逐一調べた方が良いね。

この記事は役に立ちましたか?
  • _(:3」∠)_ 面白かった (0)
  • (・∀・) 参考になった (0)
  • (`・ω・´) 役に立った (0)