JavaScript match の正規表現の中で変数を使う

更新:

JavaScript の match の正規表現の中で変数をつなげる方法についてのメモ。

match()

まず、match を基本通りに書く。

var ua = 'Test Windows ABC Firefox';
var strlist = ['windows', 'fox'];
console.log(ua.match(/windows/i));

そして正規表現の中に変数や式を入れてみると動作しない。

console.log(ua.match(/(strlist.join('|'))/i));

ただ、以下のようにスラッシュを書かないと動作する。 この記述が正しいのかは分からない。 この際、i修飾子を書く方法は不明。 以下のように + を使って正規表現とつなげることもできる。 文字クラスにある \w などの円マーク(バックスラッシュ)は \\w とする必要がある。

console.log(ua.match('[\\s\\w]+(' + strlist.join('|') + ')'));

正規表現を分けて書く場合、基本はスラッシュで囲む。

var ua = 'Test Windows ABC Firefox';
var reg = /windows/i;
console.log(ua.match(reg));

これも式や変数を加えるときはスラッシュを書かずに以下のように書くと動作する。

var ua = 'Test Windows ABC Firefox';
var strlist = ['windows', 'fox'];
var reg = '[\\s\\w]+(' + strlist.join('|') + ')';
console.log(ua.match(reg));

RegExp()

結局、変数を使い、パターン修飾子も書くには RegExp で正規表現オブジェクトを生成する必要がある。

var ua = 'Test Windows ABC Firefox';
var strlist = ['windows', 'example'];
var reg = new RegExp('[\\s\\w]+(' + strlist.join('|') + ')', 'i');
console.log(ua.match(reg));

普段あまり JavaScript を使わないので、必要になったときによく悩む。 とりあえず正規表現の中で変数をつなげたい場合は RegExp を使おう。

このエントリーをはてなブックマークに追加