クイックスタート
チュートリアル
ツール & 言語
リファレンス
書籍レビュー
正規表現ツール
grep
PowerGREP
RegexBuddy
RegexMagic
一般的なアプリケーション
EditPad Lite
EditPad Pro
言語 & ライブラリ
Boost
Delphi
GNU (Linux)
Groovy
Java
JavaScript
.NET
PCRE (C/C++)
PCRE2 (C/C++)
Perl
PHP
POSIX
PowerShell
Python
R
Ruby
std::regex
Tcl
VBScript
Visual Basic 6
wxWidgets
XML Schema
Xojo
XQuery & XPath
XRegExp
データベース
MySQL
Oracle
PostgreSQL
このサイトの詳細
はじめに
正規表現クイックスタート
正規表現チュートリアル
置換文字列チュートリアル
アプリケーションと言語
正規表現の例
正規表現リファレンス
置換文字列リファレンス
書籍レビュー
印刷可能なPDF
このサイトについて
RSSフィード & ブログ
RegexBuddy—The best regex editor and tester for JavaScript developers!

JavaScriptで正規表現を使用する

JavaScriptの正規表現フレーバーは、言語のECMA-262標準の一部です。つまり、正規表現はすべてのJavaScript実装でまったく同じように動作するはずです。過去には、ブラウザー固有の深刻な問題が多数ありました。しかし、最新のブラウザーは、正規表現に関するJavaScript標準に非常によく従っています。Webページに、ブラウザーにquirksモードではなく標準モードを使用するように要求するドキュメントタイプがあることを確認するだけで済みます。

JavaScriptの正規表現フレーバー

JavaScriptソースコードでは、正規表現は次の形式で記述されます。/パターン/修飾子ここで、「パターン」は正規表現自体であり、「修飾子」はさまざまなオプションを示す一連の文字です。「修飾子」の部分はオプションです。この構文はPerlから借りています。JavaScriptは、Perlでサポートされているもののサブセットである次の修飾子をサポートしています

次のように連結することで、複数の修飾子を組み合わせることができます。/regex/gim。特に、ドットを改行文字にマッチさせるオプションはありません。

フォワードスラッシュは正規表現を区切るため、正規表現にフォワードスラッシュが表示される場合はエスケープする必要があります。例:正規表現1/2は次のように記述されます/1\/2/JavaScriptで。

絶対にすべての文字にマッチさせるには、/s文字クラスを使用できます。これには、省略形クラスとその否定バージョンが含まれています(例:[\s\S].

JavaScriptは、Perlスタイルの正規表現を実装しています。ただし、Perlやその他の最新の正規表現フレーバーで利用できる高度な機能がかなり不足しています

これらの機能の多くは、JavaScript用のXRegExpライブラリで利用できます。

  • 後読みは、長い間JavaScriptの正規表現構文で大きな省略でした。後読みは、ECMAScript 2018仕様の一部です。最新バージョンのChrome、Edge、Firefoxでサポートされていますが、Internet Explorerなどの古いブラウザーではサポートされていません。
  • StringクラスのRegexpメソッド

    特定の正規表現が文字列の一部にマッチするかどうかをテストするには、文字列のmatch()メソッドを呼び出すことができますif (myString.match(/regex/)) { /*成功!*/ }。ユーザー入力を検証する場合は、文字列全体に対してテストしていることを確認するためにアンカーを使用する必要があります。ユーザーが数字を入力したかどうかをテストするには、次を使用しますmyString.match(/^\d+$/). /\d+/は1つ以上の数字を含む任意の文字列にマッチしますが、/^\d+$/は数字のみで構成される文字列にのみマッチします。

    正規表現を使用して検索と置換を行うには、文字列のreplace()メソッドを呼び出すことができますmyString.replace(/replaceme/g, "replacement")を使用します。この/g修飾子を使用すると、「replaceme」のすべての出現箇所が置換されます。2番目のパラメーターは、置換テキストを含む通常の文字列です。

    文字列のsplit()メソッドを使用すると、文字列が分割される位置を決定する正規表現を使用して、文字列を文字列の配列に分割できます。例:myArray = myString.split(/,/)は、カンマ区切りのリストを配列に分割します。カンマ自体は、結果の文字列の配列には含まれません。

    JavaScript RegExpオブジェクトの使用方法

    新しいRegExpオブジェクトを作成する最も簡単な方法は、単に特別な正規表現構文を使用することですmyregexp = /regex/。正規表現が文字列にある場合(たとえば、ユーザーが入力した場合)、RegExpコンストラクターを使用できますmyregexp = new RegExp(regexstring)。修飾子は2番目のパラメーターとして指定できますmyregexp = new RegExp(regexstring, "gim").

    リテラル文字列でRegExpコンストラクターを使用しないことをお勧めします。これは、リテラル文字列では、バックスラッシュをエスケープする必要があるためです。正規表現\w+は次のように作成できますre = /\w+/またはre = new RegExp("\\w+")。後者の方が間違いなく読みにくいです。正規表現\\は単一のバックスラッシュにマッチします。JavaScriptでは、これは次のようになりますre = /\\/またはre = new RegExp("\\\\").

    「myregexp」をどのように作成しても、リテラル正規表現の代わりに、上記で説明したStringメソッドに渡すことができますmyString.replace(myregexp, "replacement").

    マッチした文字列の部分を取得する場合は、作成したRegExpオブジェクトのexec()関数を呼び出します。例:mymatch = myregexp.exec("subject")。この関数は配列を返します。配列のゼロ番目の項目には、正規表現によってマッチしたテキストが保持されます。次の項目には、正規表現のキャプチャかっこによってマッチしたテキストが含まれています(もしあれば)。mymatch.lengthは、match[]配列の長さを示します。これは、正規表現のキャプチャグループの数より1つ大きいです。mymatch.indexは、正規表現がマッチした対象文字列内の文字位置を示します。mymatch.inputは、対象文字列のコピーを保持します。

    また、exec()関数を呼び出すと、RegExpオブジェクトのlastIndexプロパティも変更されます。次のマッチング試行が開始される対象文字列内のインデックスが格納されます。この値を変更して、次のexec().

    呼び出しの開始位置を変更できます。RegExpオブジェクトのtest()関数は、exec() != null

    へのショートカットです。対象文字列をパラメーターとして受け取り、正規表現が文字列の一部にマッチするかどうかによってtrueまたはfalseを返します。これらのメソッドをリテラル正規表現でも呼び出すことができます。/\d/.test(subject)

    は、対象文字列に数字があるかどうかをテストする簡単な方法です。

    呼び出しの開始位置を変更できます。置換テキストの構文String.replace()$1関数は、置換テキスト文字列内のいくつかのプレースホルダーを解釈します。正規表現にキャプチャグループが含まれている場合は、置換テキストで後方参照を使用できます。$2置換テキストでは、最初のキャプチャグループによってマッチしたテキストが挿入され、$992番目のキャプチャグループが挿入されます。そして、$10まで続きます。正規表現に1より多く、10未満のキャプチャグループがある場合、$7は、最初のグループへの後方参照の後にリテラルの0が続くものとして扱われます。正規表現に7つ未満のキャプチャグループがある場合、$7. $&はリテラルテキストとして扱われます。$`は正規表現マッチ全体を再挿入します。$'(バッククォート)は、正規表現マッチの左側のテキストを挿入します。$$(シングルクォート)は、正規表現マッチの右側のテキストを挿入します。$は、単一のドル記号を挿入します。ここに記載されているプレースホルダーのいずれも形成しない

    $_も同様です。$+$_は標準の一部ではありませんが、一部のブラウザーではサポートされています。Internet Explorerでは、$+は対象文字列全体を挿入します。Internet ExplorerとFirefoxでは、$+は、正規表現で最も高い番号のキャプチャグループによってマッチしたテキストを挿入します。最も高い番号のグループがマッチに参加しなかった場合、$+Perlでは、実際にマッチに関与した最も大きい番号のキャプチャグループによってマッチしたテキストを挿入します。

    例えば$&はPerlではどこでも使える変数ですが、JavaScriptでは、これらはreplace()関数に渡される置換文字列内のプレースホルダーとしてのみ存在します。

    WebブラウザでJavaScriptの正規表現サポートをテストする

    JavaScriptの正規表現サポートの動作を示すサンプルWebページを作成しました。今すぐWebブラウザで試すことができます。ソースコードは例の下に表示されます。

    | クイックスタート | チュートリアル | ツール & 言語 |  | リファレンス | 書籍レビュー |

    | grep | PowerGREP | RegexBuddy | RegexMagic |

    | EditPad Lite | EditPad Pro |

    | Boost | Delphi | GNU (Linux) | Groovy | Java | JavaScript | .NET | PCRE (C/C++) | PCRE2 (C/C++) | Perl | PHP | POSIX | PowerShell | Python | R | Ruby | std::regex | Tcl | VBScript | Visual Basic 6 | wxWidgets | XML Schema | Xojo | XQuery & XPath | XRegExp |

    | MySQL | Oracle | PostgreSQL |