JavaScriptの正則表現は簡潔にまとめられている。

4297 ワード

一、正規表現を定義する方法
正規表現を定義する方法には、構造関数の定義と正規表現の直接量定義があります。
var reg1 = new RegExp('\d{5, 11}'); //         
var reg2 = /\d{5, 12}/; //
正規表現の直接量文字       \o:NUL文字(\u 0000)       \t:タブ(\u 0009)       :改行(\\u 000 A)       \v:垂直タブ(\u 000 B)       \f:改ページ(\u 000 C)       \r:回車符(\u 000 D)       \xnn:16進数nnで指定されたラテン文字、例えば\x 0 Aは       \uxxxxx:16進数xxxで指定されたユニックキャラ、例えば\u 0009は\tに相当します。       \cX:制御文字^X、たとえば、\cJは改行符正則式アンカー文字に相当します。       ^:文字列の先頭にマッチし、複数行の検索で、1行の先頭にマッチします。       $:文字列の最後にマッチし、複数行の検索で、行の最後に一致します。       \b:単語の境界にマッチします。つまり、文字\wと\Wの間に位置する位置、または文字列\wと文字列の先頭または末尾の間に位置する位置(\\b)は、チェック記号です。       \B:単語以外の境界にマッチする位置       (?=p):ゼロ幅は先に断言しています。次の文字はすべてpにマッチすることが必要ですが、pにマッチする文字は含まれません。       (?!p):零幅負は先に断言し、次の文字列がpと正則表現に一致しない文字類が必要です。       [...]:大かっこ内の任意の文字       [^...]:四角い括弧内にない任意の文字       .:改行と他のユニック行の終端符以外の任意の文字       \w:任意のASCII文字からなる単語は、[a-zA-Z 0-9]に相当します。       \W:ASCII文字ではない単語は、[^a-zA-Z 0-9]に相当します。       \s:任意のUnicode空白文字       \S:Unicode以外の空白文字は、\wと\Sの違いに注意してください。       \d:任意のASCII数字は、[0-9]に相当する。       \D:ASCII数字以外の任意の文字は[^0-9]に相当します。       [\b):チェックアウト直接量(特例)正規表現の重複文字文法       {n,m}:前の項目にマッチする場合は少なくともn回ですが、m回を超えてはいけません。       {n,③:前の項目にマッチするn回以上       {n}:前の項目にマッチするn回       ?:前の項目に0回か1回を合わせます。つまり前の項目はオプションで、{0,1}に相当します。       +:前の項目に1回以上マッチすると、{1,}       *:前のエントリに0回以上マッチすると、{0}正規表現の選択、グループ、参照文字に相当します。       |:選択します。マッチするのは記号の左側のサブ表現または右側のサブ表現です。       (…):いくつかの項目を一つのユニットに組み合わせると、このユニットは「*」、「+」、「?」「|」などの記号を修飾し、その後の任意の使用のためにこのグループにマッチする文字列を記憶することができます。       (?: …):一つのユニットに項目を組み合わせるだけですが、改組にマッチした文字は記憶されません。       :n番目のグループに最初にマッチした文字と一致します。グループは丸括弧内のサブ表現です。グループインデックスは左から右への左括弧数です。形式のグループは正規表現の修飾子を符号化しません。       i:大文字と小文字を区別しないマッチングを実行する       g:グローバルマッチングを実行します。つまり、最初のマッチを見つけたら停止するのではなく、すべてのマッチを見つけます。       m:複数行マッチモード、^は1行の先頭と文字列の先頭にマッチします。$一致行の末尾と文字列の末尾はパターンマッチングのためのStringメソッドです。       search():そのパラメータは正規表現であり、最初のマッチするサブストリングの開始位置を返します。マッチするサブストリングがない場合は-1を返します。search()のパラメータが正規表現でない場合は、まずRegExpコンストラクタによって正規表現に変換されます。search()はグローバル検索をサポートしていません。修繕子gを無視しています。

var s = "JavaScript".search(/script/i); // s = 4
 
       replace():検索と置換を実行するために使われます。二つのパラメータを受信します。一つ目は正規表現で、二つ目は置換する文字列です。正規表現は、設定された修飾子gを大域的に置換します。そうでなければ、最初の部分列だけを置換します。最初のパラメータが正規表現でない場合は、正規表現に変換するのではなく文字列を直接検索します。
var s = "JavaScript".replace(/java/gi, "Script"); // s =  Script Script
 
       match():そのパラメータは正規表現であり、そうでない場合はRegExp変換により、整合結果からなる配列を返します。修飾子gが設定されている場合はグローバルマッチングを行います。
var d = '55 ff 33 hh 77 tt'.match(/\d+/g); // d = ["55", "33", "77"]
 
       SPlit():この方法は、呼び出した文字列をサブストリングの配列に分割し、使用するセパレータはスプリット()のパラメータであり、そのパラメータも正規表現を使用することができる。
var d = '123,31,453,645'.split(','); // d = ["123", "31", "453", "645"]
var d = '21 , 123,  44,  64,  67,  3'.split(/\s*,\s*/); // d = ["21", "123", "44", "64", "67", "3"]
二、RegExpオブジェクト       各RegExpオブジェクトには5つの属性があります。属性sourceは読み取り専用文字列で、正規表現を含むテキストです。プロパティglobalは読み取り専用のブール値です。この正規表現には修飾子gがあるかどうかを説明します。属性GnoreCaseは読み取り専用のブール値で、この正規表現には修飾子iがあるかどうかを説明します。属性multiineは読み取り専用のブール値です。この正規表現には修飾子mがあるかどうかを説明します。属性lastIndexは読み書き可能な整数であり、整合モードがg修饰子を有する場合、この属性は文字列全体の次の検索の開始位置を記憶する。       RegExpオブジェクトには二つの方法があります。exec()のパラメータは文字列で、その機能はmatch()と似ています。exec()の方法は指定された文字列に対して正規表現を実行します。つまり文字列の中でマッチング検索を行います。マッチが見つからない場合はnullを返し、マッチングが見つかったら行列を返します。この配列の最初の要素は正則式にマッチする文字列を含んでいます。残りの要素は丸括弧内のサブ表現と一致するサブストリングです。正則表達式に修飾子gがあるかどうかにかかわらず、同じ配列を返します。exec()を呼び出した正規表現オブジェクトが修飾子gを持っている場合、現在の正規表現オブジェクトのlastIndex属性を対応するサブストリングの文字位置に設定します。同じ正規表現がexec()を2回目に呼び出した場合、lastIndex属性が示す文字列から検索を開始します。exec()がマッチング結果を発見していない場合、lastIndexを0にリセットします。
var p = /Java/g;
var text = "JavaScript is more fun than Java!"
var r;
while((r = p.exec(text)) != null) {
       console.log(r, 'lastIndex: ' + p.lastIndex);
}
       もう一つの方法はtest()であり、そのパラメータは文字列であり、test()である文字列を調べ、正規表現の一致結果が含まれている場合、trueを返します。そうでなければfalseを返します。
var p = /java/i;
p.test('javascript'); // true