JavaScript

RegExp

 編集:2022.08.22 by T.A.

パターンでテキストを検索するために使用します。

正規表現を詳しく知りたい方は JavaScript ガイド の を参考にしてください。

コンストラクター
/pattern/flags
new RegExp(pattern[, flags])
RegExp(pattern[, flags])
新しい RegExp オブジェクトを生成します。
静的プロパティ
RegExp[@@species]
RegExp コンストラクターを返します。
インスタンス プロパティ
RegExp.flags
その RegExp の、正規表現オブジェクトのフラグを文字列で示します。
RegExp.dotAll 読取専用
その RegExp が正規表現の "s" フラグが使用されているか否かを示します。
RegExp.global 読取専用
その RegExp で正規表現の "g" フラグが使われているか否かを示します。
RegExp.hasIndices 読取専用
その RegExpで正規表現の "d" フラグが使用されたか否かを示します。
RegExp.ignoreCase 読取専用
その RegExp で "i" フラグがで使われているか否かを示します。
RegExp.multiline 読取専用
その RegExp で "m" フラグが使用されているか否かを示します。
RegExp.source
その RegExp のソース テキストを含む String を示します。両端の 2 つのスラッシュ「/」やフラグは含まれません。
RegExp.sticky
その RegExp で "y" フラグが使われているか否かを示します。
RegExp.unicode
その RegExp で "u" フラグが使われているか否かを示します。
RegExp.lastIndex
その RegExp の、次の一致を開始する位置を指定します。

これが利用できるメソッドは exec()、?。

インスタンス メソッド
RegExp.compile(pattern[, flags]) 非推奨
その RegExp の正規表現を再割り当てします。
RegExp.exec(str)
その RegExp で指定文字列との一致情報を配列で返します。lastIndex プロパティ有効です。
RegExp.test(str)
その RegExp で指定文字列の一致しているか否かを返します。
RegExp.toString()
その RegExp オブジェクトを表す文字列を返します。
RegExp[@@match](str)
その RegExp で指定文字列に一致した部分を配列で返します。
RegExp[@@matchAll](str)
その RegExp で指定文字列に一致するすべてのものをイテレーターで返します。
RegExp[@@replace](str, newSubStr|function)
その RegExp で指定文字列に一致した部分を指定の置換文字列で置換して結果の文字列を返します。

置換文字列の代わりに関数を指定することも可能です。

RegExp[@@search](str)
その RegExp で指定文字列との最初に一致した位置を数値で返します。
RegExp[@@split](str[, limit])
その RegExp で指定文字列に一致する部分で分割し、指定分の要素数だけ配列で返します。
解説
リテラル記法とコンストラクター

RegExp オブジェクトを生成するには二通りの方法があります。リテラル記法とコンストラクターです:

以下の三つの式は、同じ正規表現を生成します。

let re = /ab+c/i; // リテラル記法
let re = new RegExp('ab+c', 'i') // 最初の引数に文字列のパターンを渡したコンストラクター
let re = new RegExp(/ab+c/, 'i') // 最初の引数に正規表現リテラルを渡したコンストラクター(ECMAScript 6 から)

リテラル記法では、正規表現が評価されるときにコンパイルを行います。正規表現が変化しない場合は、リテラル記法を使用してください。例えばループ内で使用する正規表現を生成するためにリテラル記法を使用すると、反復処理のたびに正規表現を再コンパイルすることはありません。

new RegExp('ab+c') といった正規表現オブジェクトのコンストラクターは、実行時に正規表現をコンパイルします。正規表現パターンが変わることがわかっている場合や、パターンが不明でありユーザー入力など別のソースからパターンを取得する場合は、コンストラクター関数を使用してください。

コンストラクターのフラグ

ECMAScript 6 より、第 1 引数が RegExp で第 2 引数に flags を指定する場合(new RegExp(/ab+c/, 'i'))に TypeError("can't supply flags when constructing one RegExp from another")が発生しません。代わりに、引数を元に新たな RegExp が生成されます。

コンストラクター関数を使用する場合は、通常の文字エスケープ規則(文字列内に特殊文字が含まれるとき、前に「\」を付加する)が必須です。

例えば、以下 2 つのは同等です。

let re = /\w+/
let re = new RegExp('\\w+')
Perl 風の RegExp プロパティ

RegExp のプロパティのいくつかは、長い名前と短い(Perl 風の)名前があります。→deprecated RegExp properties.

正規表現を使用したデータ形式の変更

以下のスクリプトは、String インスタンスの replace() メソッドを使用して、first last 形式のフォーマットでの名前にマッチさせ、last, first 形式のフォーマットで出力しています。

置換テキスト中で、そのスクリプトは、$1 と $2 を使用して、それぞれ対応する正規表現パターンでマッチする括弧がキャプチャした結果を指定しています。

let re = /(\w+)\s(\w+)/
let str = 'John Smith'
let newstr = str.replace(re, '$2, $1')
console.log(newstr)

テスト