見出し画像

JavaScript 正規表現 初めの一歩


正規表現(Regular Expression)は、文字列のパターンを記述するための特殊な文字列です。正規表現は、あるパターンに一致する文字列を検索したり、置換したりするために利用されます。


例えば、ある文字列内から電話番号やメールアドレス、URLなど特定の形式の情報を抽出したりする際に役立ちます。


他にも特定の文字列を別の文字列に置換する際にも正規表現が使用されます。例えば、ある文書内のすべての"カフェ"という単語を"ファミレス"に置換する場合に役立ちます。"カフェ"という単語を正規表現で抽出して、replace() メソッドで置換します。


// 置換前の文書
let documentText = "ここのカフェは、とても人気です。";

// /カフェ/gで正規表現を使い、ドキュメント内の全ての「カフェ」を「ファミレス」に置換
let newDocument = documentText.replace(/カフェ/g, 'ファミレス');

// 置換後の文書を出力
console.log(newDocument); // ここのファミレスは、とても人気です。


正規表現を使いこなすためには、パターンや記号を暗記することよりも、その概念を理解し、実際の使用例や練習を通じてスキルを身につけることが重要です。


正規表現の意味


正規表現の「正規」とは「規則的な」という意味であり、「表現」とは「表すこと」「表現方法」を指します。


つまり、「正規表現」とは、文字列のパターンを規則的に表現するための方法や記法のことです。正規表現は、特定の文字列パターンを捉えたり、検索したり、置換したりするための手法として広く利用されています。


JavaScriptにおける正規表現


JavaScriptにおいて、正規表現はRegExpオブジェクトを使って表現されます。正規表現リテラル(/pattern/flags)RegExpコンストラクタを使用して正規表現パターンを作成します。ちなみに、RegExpは、【regular expression】の略で日本語で訳すと【正規表現】となります。


例えば、以下は正規表現リテラルを使った例です:


const pattern = /abc/; // "abc"という文字列に一致する正規表現パターン


また、RegExpコンストラクタを使用して正規表現を作成することもできます:


const pattern = new RegExp('abc'); // "abc"という文字列に一致する正規表現パターン


RegExpオブジェクトには、正規表現パターンの他に、オプションのフラグ(flags)を指定することもできます。一般的なフラグには、g(グローバル検索)i(大文字小文字を区別しない)m(複数行検索)などがあります。


例えば、大文字小文字を区別せずに全ての一致を検索する場合は、次のようにフラグiを使用します:


const pattern = /abc/i;
console.log(pattern.test("abc")); // true
console.log(pattern.test("ABC")); // true


正規表現を使うことで、文字列内のパターンを簡単に検索や置換することができます。


正規表現のパターン一覧

文字説明例^文字列の先頭に一致する/^Hello/ は "Hello" で始まる文字列に一致する$文字列の末尾に一致する/world$/ は "world" で終わる文字列に一致する.任意の一つの文字に一致する/h.t/ は "hat", "hot", "hit" などに一致する*直前の文字が0回以上繰り返される/go*d/ は "god", "good", "gooood" などに一致する+直前の文字が1回以上繰り返される/go+d/ は "good", "goooood" などに一致する?直前の文字が0回または1回現れる/colou?r/ は "color" または "colour" に一致する{n}直前の文字がn回現れる/go{2}d/ は "good" に一致する{n,}直前の文字がn回以上現れる/go{2,}d/ は "good", "gooood", "goooood" などに一致する{n,m}直前の文字がn回以上m回以下現れる/go{1,3}d/ は "god", "good", "gooood" に一致する[]指定した文字のいずれかに一致する/[a-z]/ は小文字アルファベットに一致する[^]指定した文字以外のいずれかに一致する/[^0-9]/ は数字以外の文字に一致する()グループを作成し、部分文字列をキャプチャ/(foo)/ は "foo" という文字列に一致し、キャプチャされる|パイプで区切られた複数のパターンのいずれかに一致する/foo|bar/ は "foo" または "bar" に一致する\特殊文字のエスケープまたは特殊シーケンスの導入/\d+/ は数字に一致する正規表現のパターン一覧

正規表現パターンで使用される特殊文字

正規表現パターン説明.何らかの1文字に一致する。\w英数字とアンダースコアに一致する。\d0〜9の数字に一致する。\s空白文字(スペース、タブ、改行など)に一致する。正規表現パターンで使用される特殊文字

正規表現のオプションフラグ

フラグ説明i大文字と小文字を区別せずにマッチングを行います。g入力文字列内のすべてのマッチを検索します(グローバル検索)。m複数行モードでマッチングを行います。s任意の文字を . メタ文字にマッチさせる「dotall」モード。uユニコードのマッチングを有効にします。y文字列の先頭からのマッチングのみを行います。正規表現のオプションフラグ

正規表現に関連するメソッド


JavaScriptでよく使用される正規表現オブジェクトのメソッドとプロパティ、そしてそれらを使って文字列操作を行う際に使用されるメソッドを表にまとめました。

メソッド/プロパティ説明RegExp.test()文字列が正規表現に一致するかどうかを確認し、一致すれば true を返す。RegExp.exec()正規表現と一致する文字列の情報を含む配列を返す。RegExp.compile()正規表現オブジェクトをコンパイルする。RegExp.toString()正規表現オブジェクトを文字列として返す。RegExp.source正規表現パターンの文字列を返す。RegExp.globalg フラグが設定されているかどうかを示すブール値を返す。RegExp.ignoreCasei フラグが設定されているかどうかを示すブール値を返す。RegExp.multilinem フラグが設定されているかどうかを示すブール値を返す。RegExp.lastIndex次の exec() 呼び出しで開始される検索の位置を示す整数を返す。RegExp.prototype.test()文字列が正規表現に一致するかどうかを確認し、一致すれば true を返す。RegExp.prototype.exec()正規表現と一致する文字列の情報を含む配列を返す。String.match()文字列が正規表現に一致する場合は一致する部分文字列の配列を返し、一致しない場合は null を返す。String.search()文字列内で正規表現に一致する最初の位置を返し、一致しない場合は -1 を返す。String.replace()文字列内で正規表現に一致する部分を置換する。String.split()正規表現に一致する箇所で文字列を分割する。正規表現に関連するメソッド testメソッドを使用した例:

testメソッドは、指定された文字列が正規表現パターンに一致するかどうかを確認します。つまり、テストしたい文字列が正規表現パターンにマッチする場合、trueを返し、マッチしない場合はfalseを返します。


// 指定された文字列が正規表現パターンに一致する場合

// 正規表現を定義します
var regex = /apple/;

// テストする文字列を定義します
var str = "I have an apple";

// 正規表現に一致するかどうかを確認します
var result = regex.test(str);

// 結果を出力します
console.log(result); // true


// 指定された文字列が正規表現パターンに一致しない場合

// 正規表現を定義します
var regex = /apple/;

// テストする文字列を定義します
var str = "I have a banana";

// 正規表現に一致するかどうかを確認します
var result = regex.test(str);

// 結果を出力します
console.log(result); // false

replaceメソッドを使用した例:

replaceメソッドは、JavaScriptの文字列オブジェクトが提供するメソッドの一つで、指定された正規表現パターンに一致する部分文字列を別の文字列で置き換えます。


// 文字列を定義します
var str = "I have an apple";

// "apple"という部分文字列を"banana"に置き換えます
var newStr = str.replace("apple", "banana");

// 結果を出力します
console.log(newStr); // "I have an banana"


この記事が気に入ったらサポートをしてみませんか?