RegExpエッセイJavaScript RegExpオブジェクト

4914 ワード

概要
RegExpのコンストラクターは正規表現オブジェクトを作成し、テキストにパターンを合わせます.
正規表現の紹介については、JavaScriptガイドの正規表現の章を読んでください.
構文
文字と構成記号は可能です.
パラメータ
pattern正則表現のテキストflagsを指定すると、フラグは以下の値の任意の組み合わせを持つことができます.
gグローバルマッチングiは、大文字小文字m複数行を無視します.開始と終了の文字(^^と$)をマルチラインモードで動作させます.たとえば、^と$は文字列の各行の開始と終了にマッチします.入力文字列の最初と最後だけではなく、モードをユニックコードポイント(code points)とします.を選択します.y粘り度;ターゲット文字列では、正規表現のlastIndex属性で指定された表示位置からのみマッチします.を選択します.2つの方法で正規のオブジェクトを作成できます.文字列を表すには、文字列を表すには、引用符を使わずに構造関数に渡すパラメータに引用符を使います.以下の表式は同じ正規表現を作成します.

/ab+c/i;
new RegExp('ab+c', 'i');
new RegExp(/ab+c/, 'i');
表式が与えられている場合は、正規表現のコンパイル状態を字面量形式で提供し、正規表現が定数に保たれている場合は字面量を使用します.たとえば、ラウンド中に字面量を使って正規表現を作成すると、正則表現は反復ごとにコンパイルされなくなります.を選択します.正規表現オブジェクトの構造関数として、new RegExp('ab+c')は正規表現の実行時にコンパイルされます.正規表現モードが変更されることを知っている場合、またはどのようなパターンがあるかは事前に知られていません.別のソースから取得します.これらの場合はコンストラクタが使用できます.ECMAScript 6から最初のパラメータが正規表現で第二のフラグパラメータが存在する場合、new RegExp(/ab+c/i')はTypeErrをスローしません.「他の正規表現から構成するとフラグはサポートされていません」)の異常に代わり、これらのパラメータを使って新しい正規表現を作成します.
コンストラクタを使って正則オブジェクトを作成するには、従来の文字変換規則が必要です.たとえば、以下は等価です.

var re = new RegExp("\\w+");
var re = /\w+/;
正規表現を字面量で定義するvar expression = /pattern/ flags; pattern部分は、任意の単純または複雑な正規表現であってもよい.正規表現を示しているflageの挙動1.g:グローバルモードは、最初の一致項が発見された後に、2.iを停止することはない.大書きモードを区別しない.3.m:マルチラインモード例:

var pattern1 = /at/g; //        at
var pattern2 = /[bc]at/i; //     “bat” “cat”,      
var pattern3 = /.at/gi; //     .at“  ”     。     
モードで使用するすべての要素の文字は、変換されなければなりません.正規表現には、元の文字が含まれています.

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"/\.at"/name/\age/"/\d.\\d.\\d.\\d{1,2}/\w\hello\\123/\hello\\
注:字面量と実用化を使って正規表現を作成するのとは違って、字面量は常に同じRegExpの例(ECMAScript 3)を共有します.構造関数を使って作成した新しいRegExpの例はすべて新しい例です.
RegExpのインスタンスプロパティ

console.log(pattern5.global); //false      g  
console.log(pattern5.ignoreCase); //true      i  
console.log(pattern5.multiline); //false      m  
console.log(pattern5.lastIndex); //0                
console.log(pattern5.source); //[bc]at            
属性を継承

console.log(pattern5.toString()); // /[bc]at/i            
console.log(pattern5.toLocaleString()); // /[bc]at/i            
console.log(pattern5.valueOf()); // /[bc]at/i            
RegExp方法の一例:exec()は、モード文字列を適用したパラメータを受け取ります.最初のマッチ情報を含む配列を返します.ない場合はnullに戻り、返された配列の例は、2つの属性index(一致項の文字中の位置)とinput(アプリケーションの正規の文字列)を含みます.

var text = "huang jin liang shi ge hao ren";
var pattern6 = new RegExp("huang( jin liAng( shi ge hao ren)?)?", "i");
var matches = pattern6.exec(text);
console.log(matches); 
//[ 'huang jin liang shi ge hao ren',
// ' jin liang shi ge hao ren',
// ' shi ge hao ren',
// index: 0,
// input: 'huang jin liang shi ge hao ren' ]

var text1 = "cat, bat, sat";
var pattern7 = new RegExp(".at")
var matches1 = pattern7.exec(text1);
console.log(matches1); //cat

var pattern8 = new RegExp(".at", "gm");
var matches2 = pattern8.exec(text1);
console.log(matches2); //cat
var matches3 = pattern8.exec(text1);
console.log(matches3); //bat
var matches4 = pattern8.exec(text1);
console.log(matches4); //sat
var matches5 = pattern8.exec(text1);
console.log(matches5); //null
方法2:test()は、モード文字列を適用したパラメータを受け取ります.このモードがパラメータと一致した場合はtrueに戻り、逆にfalseに戻ります.

var text2 = "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&最近のマッチング項目lastParten$+最近のキャプチャグループleftConteet$input文字列の中でlastMatch前のテキストmultiiline$input文字列のlastMatchの後のテキスト$1~9はそれぞれ第数のキャプチャグループを格納するために使用されます.
ECMAScriptの限界1.マッチ文字列の開始と終了の\Aと\Zアンカー2.バックルック3.セットとインターレース4.原子グループ5.Unicodeサポート(1文字を除く)6.名前付きキャプチャグループ7.sとxマッチングモード8.条件マッチング9.正規表現コメント
一つのjsの中で複数行にマッチする方法を発見したばかりです.


var s = "Please yes
make my day!"; alert(s.match(/yes.*day/)); // Returns null alert(s.match(/yes[^]*day/)); // Returns 'yes
make my day'
残念ですが、editplusは使えません.dwを使うほうが便利です.