備忘録的プログラミングリファレンス

正規表現

 JavaScriptにおける正規表現とは、複数の検索条件を1つの文字列として表現するパターンマッチング機能のことです。検索時のパターンマッチングに利用します。

 このページでは以下の項目について解説します。

正規表現の構文

 JavaScriptでの正規表現の構文には、スラッシュ / で囲んだ正規表現リテラルとRegExpオブジェクトを使う方法があります。

正規表現リテラル

 正規表現リテラルを”/”(スラッシュ)で囲んだパターンで作成する方法です。パターンが変化しない場合は向いています。

var _text = "abcdefghijk";
var re = /abc/;
console.log( re.test(_text) );

 スラッシュ / の直後にフラグを指定することができます。フラグについては正規表現のフラグを参照してください。

var re = /abc/i;

RegExpオブジェクト

 RegExpオブジェクトを利用する方法です。ユーザーによる入力がある、パターンが変化する場合はRegExpオブジェクトを利用します。

var _text = "abcdefghijk";
var re = new RegExp('abc','ig');
console.log( re.test(_text) );

 RegExp() コンストラクターの第2引数はフラグといいます。複数回の検索や大文字、小文字の区別などの検索条件を設定することができます。 詳しくは正規表現のフラグを参照してください。

基本的な正規表現一覧

 以下は基本的な正規表現です。詳しくは、正規表現を参照してください。

正規表現概略
.任意の1文字a.cabc afc aあc
*直前の文字が0回以上繰り返し、最長一致ab*cac abbbbbbc
+直前の文字が1回以上繰り返し、最長一致ab+cabc abbbbbbc
?直前の文字が0か1回、最長一致ab?cac abc
^行の先頭から比較^abcabc
$行の末尾から比較xyz$xyz
|OR条件abc|defabc def
( )キャプチャーグループa(bc|de)abc ade
[][]括弧内のいずれかの文字[abc] [a-c]a, b, c
[^]否定条件 括弧内の文字以外[^abc] [^a-c]a, b, c以外
{n}直前の文字数を指定a{3}aaa
\直後の文字をエスケープab\+cdab+cd

正規表現のフラグ

 例えば以下のような正規表現による検索があったとします。 RegExp() コンストラクターの第2引数が正規表現におけるフラグといいます。

var _text = "abcdefghijk";
var re = new RegExp('abc','ig');
console.log( re.test(_text) );
	

 上記のRegExp() コンストラクターは以下のように書くこともできます。

var re = new RegExp( '/abc/ig' );
	

 スラッシュ/に囲まれた部分が検索文字列です。スラッシュ/の直後のigがフラグといいます。

フラグ一覧

 以下はフラグの一覧です。

フラグ概要
i大文字小文字を区別しない。A と a は同じ文字とみなす
g複数個すべての一致を検索。指定がない場合は最初の1つのみ
m複数行を検索。改行をまたいで検索。
s正規表現の . が検索範囲に改行文字 \n も含む。通常 .
uUnicode をサポート
yスティッキーモードの有効/無効。 lastIndex で検索開始位置を変更できるようになる

置換関数 replace() の概説

String.prototype.replace()

 簡単な文字や文字列の置換は replace() を使います。

文字の置換
var str = "abcdefg"
var re_str = str.replace( 'abc', 'ABC' );

console.log( re_str );

 結果は、 "aBcdefg" になります。

 replace() 関数は最初に見つかった対象の文字列のみを置換します。複数あっても全てを置換しません。 もしも複数個を置換したい場合は以下の正規表現とフラグ q を使って replace() を実行します。

正規表現を使った replace()

正規表現による置換
var str = "abcdefg-abc"
var reg = new RegExp('abc');

var re_str = str.replace( reg, 'ABC' );
console.log( re_str );

 結果は、 "ABCdefg-abc" になります。

複数個の置換

正規表現による複数個の置換
var str = "abcdefg-abc"
var reg = new RegExp('abc','g');

var re_str = str.replace( reg, 'ABC' );
console.log( re_str );

 結果は、 "ABCdefg-ABC" になります。