English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

RegExp 随筆 JavaScript RegExp オブジェクト

概要

RegExpの構築関数は、テキストをマッチングするための正規表現オブジェクトを作成します。

正規表現の紹介については、JavaScriptガイドの正規表現セクションを参照してください。

文法

文字と構築記号が可能です:
/pattern/flags new RegExp(pattern [, flags])

引数

pattern
正規表現のテキスト
flags
指定された場合、フラグは以下の値の任意の組み合わせを持つことができます:

g
グローバルマッチ
i
大文字小文字を区別しない
m
マルチライン; 開始および終了文字(^ と $)をマルチラインモードで動作させます(例えば、^ と $ は行の始めと終わり(行は \n または \r で区切られる)にマッチングを行い、全体の入力文字列の最初と最後のみにマッチングを行いません)。
u
Unicode。パターンをUnicodeコードポイント(コードポイント)のシーケンスとして見なします。
y
粘着性; 目標文字列内で、正規表現のlastIndex属性で指定された表示位置からのみマッチングを行います(そして、その後のインデックスからマッチングを試みません)。
説明
正規表現オブジェクトを作成する方法は2種類あります:文字列リテラルと構築関数。文字列を表現する場合、文字列リテラル形式は引用符を使用せず、構築関数に渡される引数は引用符を使用します。以下の表現は同じ正規表現を作成します:

/ab+c/i;
new RegExp('ab+c', 'i');
new RegExp(/ab+c/, 'i');

表現式が割り当てられるとき、文字列リテラル形式は正規表現のコンパイル(コンパイル)状態を提供し、正規表現が定数として保持される場合に文字列リテラルを使用します。例えば、ループ内で文字列リテラルを構築して正規表現を使用する場合、正規表現は各イテレーションごとに再コンパイル(再コンパイル)されません。
そして正規表現オブジェクトの構造関数、例えば new RegExp('ab}}+c') は正規表現の実行時コンパイル(runtime compilation)を提供します。正規表現のパターンが変更されることを知っている場合や、何かのパターンが事前にわからない場合、例えばユーザーの入力から取得する場合など、これらの状況では構造関数を使用できます。
ECMAScript 6始めに、第一引数が正規表現で第二引数がフラグ引数がある場合、new RegExp('/ab+c/, 'i')は longer TypeError (「他の正規表現から構築した場合にフラグがサポートされていない」)の例外を発生させなくなります。代わりに、これらの引数を使用して新しい正規表現を作成します。

正規表現オブジェクトの構造関数、例えば new RegExp('ab}

var re = new RegExp("\\w+");
var re = /\w+/;

文字列リテラルで正規表現を定義します
var expression = /pattern/ flags;
pattern 部分はどんなシンプルな正規表現や複雑な正規表現でもできます
flag 正規表現の動作を示す 1.g:全体モード、最初の一致項が見つかった後に停止しません 2.i:大文字と小文字を区別しないモード 3.m:複数行モード
例:

var pattern1 = /at/g; //一致する全てのat
var pattern2 = /.valueOf());/i; //一致する第一个“bat”または“cat”,大文字と小文字を区別しない
var pattern3 = /.at/gi; //全体検索で.atで終わる3文字を検索します。大文字と小文字を区別しない

パターン中で使用される全てのメタ文字はエスケープする必要があります。正規表現のメタ文字には:([{\^$|?*+.}])
例:

var pattern4 = /\[bc\]at/i; //一致する第一个“[bc]at”,大文字と小文字を区別しない

RegExp構造関数を使用して、受ける2個の引数、引数1:一致させる文字列パターン、引数2:オプションのフラグ動作
例:

var pattern5 = new RegExp("[bc]at", "i");

注:因為RegExp構造関数のパターン引数は全て文字列であるため、ある場合には文字列を二重エスケープする必要があります。全てのメタ文字は二重エスケープする必要があります。

例:
文字列        等価文字列
/\[bc\]at/      "\\[bc\\]at"
/.\at/        "\\.at"
/name/\age/    "name\\/age"
/\d.\d{1,2}/    "\\d.\\d{1,2"
/\w\\hello\\123/ \w\\hello\\123"

"}}3注:リテラルとインスタンス化で正規表現を作成すると異なります。リテラルは常に同じRegExpインスタンスを共有します(ECMAScript

)。コンストラクタを使用して作成される新しいRegExpインスタンスは、すべて新しいインスタンスです。

console.log(pattern5RegExpインスタンス属性 //.global);
console.log(pattern5false gフラグが設定されているかどうか //.ignoreCase);
console.log(pattern5true iフラグが設定されているかどうか //.multiline);
console.log(pattern5false mフラグが設定されているかどうか //.lastIndex);
console.log(pattern50 最初の検索位置から次の一致項を検索する開始位置 //.source);

[bc]at 正規表現の文字列表現

console.log(pattern5継承属性 // /.valueOf());/[bc]at 正規表現の文字列表現
console.log(pattern5.toString()); // /.valueOf());/[bc]at 正規表現の文字列表現
console.log(pattern5.toLocaleString()); // /.valueOf());/[bc]at 正規表現の文字列表現

i 正規表現のリテラル表現
RegExpインスタンスメソッド

方法一:exec(),受け取る引数は、適用されるパターン文字列です。最初の一致項の情報を含む配列を返します。一致項がない場合nullを返します。返される配列のインスタンスには、index(一致項が文字列中の位置)とinput(正規表現に適用される文字列)という2つの属性があります。
var pattern6 var text = "huang jin liang shi ge hao ren";63= new RegExp("huang( jin liAng( shi ge hao ren)?)&#
;", "i");6var matches = pattern
.exec(text); 
//console.log(matches);
// [ 'huang jin liang shi ge hao ren',
// 'jin liang shi ge hao ren',
// 'shi ge hao ren',
// index: 0,
方法二:test(),受け取る引数は、適用されるパターン文字列です。このパターンと引数が一致する場合true、一致しない場合falseを返します1 input: 'huang jin liang shi ge hao ren' ]
var pattern7 = "cat, bat, sat";
sat1 var matches7= pattern1);
.exec(text1); //= new RegExp(".at", "gm");
var pattern8 = new RegExp(".at")
sat2 var matches8= pattern1);
.exec(text2); //= new RegExp(".at", "gm");
sat3 var matches8= pattern1);
.exec(text3); //cat
sat4 var matches8= pattern1);
.exec(text4); //bat
sat5 var matches8= pattern1);
.exec(text5); //console.log(matches

null

方法二:test(),受け取る引数は、適用されるパターン文字列です。このパターンと引数が一致する場合true、一致しない場合falseを返します2 = "000-00-0000";
var pattern9 = new RegExp("\\d{3}-\\d{2}-\\d{4});
console.log(pattern9.test(text2))
console.log(text2);
if (pattern9.test(text2)) {
console.log("マッチ成功");
} else {
console.log("マッチ失敗");
}

構造関数属性(一部のブラウザではサポートされていません)
長属性名    短属性名 説明
input      $_    最後にマッチしようとする文字列
lastMatch    $&    最後のマッチ
lastParen    $+    最後のキャプチャグループ
leftContext    $`    input文字列のlastMatchの前のテキスト
multiline    $*    boolean、マルチラインモードかどうか
rightContext $'    input文字列のlastMatchの後のテキスト
        $1~$9 それぞれのキャプチャグループを保存するために使用

ECMAScriptの限界の中で
1.文字列の始まりと終わりの\Aと\Zアンカーをマッチ
2.後方検索
3.ユニオンおよび交差点クラス
4.原子グループ
5.Unicodeサポート(単一文字を除く)
6.名前付きキャプチャグループ
7.sとxマッチパターン
8.条件マッチ
9.正規表現コメント

jsで複数行をマッチする方法を見つけました

<script>
var s = "Please yes\nmake my day!";
alert(s.match(/yes.*day/));
// nullを返します
alert(s.match(/yes[^]*day/));
// 「yes\nmake my day」を返します
</script>

残念ながら、editplusは使用できません。多くの場合、dwを使用する方が便利です。

おすすめ