JavaScript の正規表現の基本的な使い方
正規表現とは
正規表現 (regular expression) というのは、パターンを使って文字列を表す方法のことです。
JavaScript では RegExp クラスを使って文字のパターンを記述することができます。 RegExp のメソッドを使うことで、与えらた文字列が指定したパターンに合致するかどうかチェックしたり、 あるパターンの場所から文字を抜き出したり、置き換えたりすることができます。
正規表現を使うことで、入力チェックを行ったり、文字列を整形したりすることが簡単になります。
JavaScript の RegExp オブジェクトによる正規表現
さっそく、正規表現を使う具体例をみてみましょう。
例として、貨物のコンテナをとりあげます。コンテナには「コンテナ番号」というコンテナを識別する番号が振られています。 コンテナ番号は ABCD1234567 のように、「大文字のアルファベット4文字」と「7桁の数字」で構成されています。
もしあなたが、ユーザーにコンテナ番号を入力してもらうプログラムを開発しているとして、ユーザーの入力がコンテナ番号らしい入力であるかチェックするにはどうしたらよいでしょうか?
こうした時に、正規表現が役に立ちます。
正規表現で「大文字のアルファベット4文字」と「7桁の数字」を表すパターンは、 [A-Z]{4}[0-9]{7} と書けます。
JavaScript で正規表現を表すクラスは RegExp クラスです。パターンを表す文字列を RegExp クラスのコンストラクタに渡して、正規表現のオブジェクトを作成します。
const r = new RegExp('^[A-Z]{4}[0-9]{7}$')
試しに入力の文字列を、コンテナ番号として正しい形式である ABCD1234567 とします。 これを RegExp オブジェクトの test() メソッドに渡すと、パターンに合致した入力であるかチェックして、合致すれば true 、しなければ false を返します。
const input = 'ABCD1234567'
const m = r.test(input)
if (m) {
console.log('MATCH')
} else {
console.log('NOT MATCH')
}
// MATCH
この例では、入力文字列はパターンに合致していますので、 test() メソッドは true を返します。
JavaScript 正規表現のパターン
上の例では、「大文字のアルファベット4文字」と「7桁の数字」を表すパターンと表す RegExp オブジェクトを作成するために、次のように書きました。
const r = new RegExp('^[A-Z]{4}[0-9]{7}$')
ここでコンストラクタに渡したパターン文字列 '^[A-Z]{4}[0-9]{7}$' の意味は、次のように分けて考えることができます。
- ^ 文字列の始まりからマッチさせる
- [A-Z] 大文字アルファベット A から Z がひとつ
- {4} それが4個続く
- [0-9] 数字の 0 から 9 がひとつ
- {7} それが7個続く
- $ 文字列の終わり
正規表現ではパターンを記述する方法がいくつかあり、より複雑な状況に対応できるようになっています。
正規表現のパターンについては「JavaScript 正規表現パターンの基本」などもご覧ください。
尚、 上で作成した RegExp オブジェクトと同様のオブジェクトを作成するために、 / でパターンを囲み次のように記述することもできます。
const r = /^[A-Z]{4}[0-9]{7}$/
意味は同じになりますが、簡潔に書けるのでよく使用されます。