前の言葉
JavaScriptの正規表現の基本的な構文は、以前に導入されました。 JavaScriptのRegexpクラスは、正規表現を表します。文字列とregexpの両方がメソッドを定義します。正規表現を使用すると、強力なパターンマッチング、テキストの検索、交換を実行できます。この記事では、正規表現のregexpオブジェクトと関係する正規表現を紹介します
属性とメソッド
物体
JavaScriptの正規表現は、Regexpオブジェクトで表され、それらを記述するには2つの方法があります。1つは文字通りの方法です。もう1つはコンストラクターメソッドです
perl執筆方法
JavaScriptの正規表現特性がPerlから借りたため、Perl執筆とも呼ばれる正規表現文字通りのライティング
正規表現リテラルは、一対のスラッシュ(/)と3つのフラグの間に含まれる文字として定義されます。
var expression = /pattern /flags;
正規表現のマッチングパターンは、次の3つのフラグをサポートしています。
G:グローバルパターンを意味します。つまり、最初の試合が見つかったときにすぐに停止するのではなく、パターンがすべての文字列に適用されます。
I:ケース非感受性モードを示します。つまり、一致を決定するときにパターンと文字列の場合は無視されます。
M:マルチラインパターンを表します。つまり、テキストの行の終わりに到達すると、次の行のパターンに一致するアイテムがあるかどうかを探し続けます。
//文字列var p =/at/g; // test()メソッドの「at」のすべてのインスタンスを一致させると、一致がconsole.log(p.test( 'ata')); // trueconsole.log(p.test( 'aba')); // false console.log(p.test( 'ata'));
regexpコンストラクター
通常の組み込みオブジェクトと同様に、regexp正規表現オブジェクトは、new+regexp()コンストラクターの形式もサポートしています。
regexpコンストラクターは、一致する文字列パターンとオプションのフラグ文字列(フラグ)の2つのパラメーターを受信します。旗文字列とリテラルの3つのフラグには、「G」、「I」、「M」という意味があります。
regexpコンストラクターの両方のパラメーターは文字列です。リテラルフォームを使用して定義された表現は、コンストラクターを使用できます
//文字列var p1 =/at/g; //上記と同じ「at」のすべてのインスタンスをvar p2 = new regexp( 'at'、 'g');
[注] ECMAScript3仕様は、正規式の直接数量が実行されると再gExpオブジェクトに変換されることを規定しています。同じコードで表される正規表現直接量の各操作は、同じオブジェクトを返します。 ECMAScript5仕様は反対の規定を作成し、同じコードで表される正規表現は毎回直接カウントされます。
すべての操作は新しいオブジェクトを返します。 IE6-8はECMAScript5仕様に従って常に実装されているため、互換性の問題はありません
正規表現のリテラルは変数をサポートしていないため、変数が正規表現に表示される場合、regexpコンストラクターを使用して、変数を弦のスプライシングとしてregexpコンストラクターのパラメーターにスプライスすることのみができます。
【ヒントclassNameから要素を取得します
function getByclass(obj、className){var Elements = obj.getElementsByTagname( '*'); var result = []; var pattern = new regexp( '(^| // s)' + className + '(// s | $)'); for(var i = 0; i <Elements.length; i ++){if(pattern.test(elements [i] .classname)){result.push(elemention [i]); }} return result;}インスタンスプロパティ
各regexpインスタンスオブジェクトには、次の5つのプロパティが含まれています
グローバル:ブール値は、gフラグ無知のかどうかを示します:ブール値はi flag lastindex:整数が次の試合を検索するスタートのキャラクター位置を示します。それは0からカウントされますマルチライン:ブール値は、コンストラクターに渡される文字列パターンではなく、文字通りの形で戻る正規表現の旗の表現:旗のmsource:string of reling expressionの表現を示します。
var pattern = new regexp( '// [bc //] at'、 'i'); console.log(pattern.global); // falseconsole.log(pattern.ignorecase); // true console.log(pattern.multiline); // verseconsole.log(pattern.lastindex); // 0console.log(pattern.source); // '/[bc/] at' '
regexpのexec()またはtest()関数を使用してグローバルパターン「g」を設定すると、正規表現の一致はlastindexの位置から開始され、最後の試合が成功した後にlastindexがリセットされます。このようにして、文字列で繰り返し反復し、各マッチング結果をシーケンスで見つけることができます。ただし、異なる文字列に対して同じregexp exec()またはtest()メソッドを呼び出す必要がある場合、この変数は予期しないマッチング結果ももたらす可能性があります。したがって、文字列を交換するときは、regexpのlastIndexを0に明示的に設定する必要があります
// exec()メソッドはアレイで一致を返しますvar p = // w/g; var s = 'ab'; console.log(p.lastindex); // 0console.log(p.exec(s)); // ['a'] console.log(p.lastindex); // 1console.log( p.exec(s)); // ['b'] console.log(p.lastindex); // 2console.log(p.exec(s)); // nullconsole.log(p.lastindex); // 0
var p = // w/g; var s1 = 'ab'; var s2 = 'ba'; console.log(p.lastindex); // 0console.log(p.exec(s1)); // ['a'] console.log(p.lastindex); // 1console.log(p.exec(s2)); // ['a'] console.log(p.lastindex); // 2
コンストラクタープロパティ
regexpコンストラクター特性は、実行された最新の正規表現操作に基づいて異なる静的特性と見なされます。
それらにアクセスするには、長い属性名と短い属性名、アクセスするには2つの方法があります。ほとんどの短い属性名は有効なeCMAScript識別子ではないため、四角いブラケット構文を介してアクセスする必要があります。
長い属性名短い属性名入力$ _ラストマッチ$&ラストマッチラストパレン$+最後のマッチラストマッチキャプチャグループleftcontext $ `入力マルチライン$* boolean値すべての式がマルチラインパターンrightcontext $ 'を使用するかどうかを示す最後の試合$ cキャプチャグループ左c
これらのプロパティを使用して、exec()メソッドまたはtest()メソッドによって実行される操作からより具体的な情報を抽出できます
// test()は、文字列が正規式と一致し、ブール値を返すかどうかをテストするために使用されますvar text = 'これは短い夏'; var pattern =/(。)hort/g; if(pattern.test(text)){console.log(regexp.input); // console.log(regexp.rightContext); // 'summer' console.log(regexp.lastmatch); // 'short' console.log(regexp.lastparen); // 's' console.log(regexp.multiline); console.log(regexp ['$ `']); // 'これは' console.log(regexp ['$'"]); // 's summer' console.log(regexp ['$&']); }JavaScriptには、キャプチャグループを保存するための9つのコンストラクタープロパティがあります。これらのプロパティは、exec()またはtest()メソッドを呼び出すときに自動的に入力されます。
[注]理論的には、elgexp。式全体に保存する必要がある$ 0は存在しません、値は未定義です
//Regexp.1/Regexp.$2/Regexp.3…to regexp。$ 9は、最初の2番目の一致するキャプチャグループvar text = 'これは短い夏でした'; var pattern =/()または(。)/g; if(pattern.test(text)){console.log(console.legexp。$ 1); console.log(regexp。$ 2); // t}例の方法
2つのカテゴリに分割されたRegexpオブジェクトには、5つのインスタンスメソッドがあります。オブジェクトの3つの一般的な方法を含む:toString()、tolocalstring()、valueof()、および通常のマッチング方法()およびexec()
オブジェクト共通方法
regexpオブジェクトは、オブジェクトオブジェクトのtoString()、tolocalestring()、およびvalueof()の3つの方法を継承します。
【toString()】
toString()メソッドは、正規表現のリテラルを返します
【tolocalestring()】
tolocalestring()メソッドは、正規表現のリテラルを返します
【valueof()】
valueof()メソッドは、正規表現オブジェクト自体を返します
[注]正規表現が何を作成しても、これらの3つの方法はリテラルフォームのみを返します
var pattern = new regexp( '[bc] at'、 'gi'); console.log(pattern.tostring()); // '/[bc] at/gi'console.log(pattern.tolocalestring()); // '/[bc] at/gi'console.log(pattern.valueof()); ///[bc] at/givar pattern =/[bc] at/gi; console.log(pattern.tostring()); // '/[bc] at/gi'console.log(pattern.tolocalestring()); // '[bc] at/gi'console.log(pattern.valueof()); ///[bc] at/gi
通常のマッチング方法
regexpオブジェクトには、それぞれexec()とtest()には2つの通常のマッチング方法しかありません。
【exec()】
exec()メソッドは、グループをキャプチャするために特別に設計されており、パラメーター、つまりパターンを適用する文字列を受け入れます。次に、一致情報を含む配列を返し、一致していない場合はnullを返します。
マッチアレイでは、最初のアイテムはパターン全体に一致する文字列であり、他のアイテムはパターンのキャプチャグループに一致する文字列です。パターンにキャプチャグループがない場合、配列には1つのみが含まれます
返された配列には、インデックスと入力の2つの追加プロパティが含まれています。インデックスは、一致が文字列の位置にあることを意味し、入力は正規表現が適用される文字列を意味します
var text = 'ママとパパとベイビーなど; baby '// matches.index:0 // matches.input:「ママとパパと赤ちゃんなど」
exec()メソッドの場合、グローバルフラグ(g)がパターンに設定されていても、一度に1つの一致のみを返します。グローバルフラグを設定することなく、同じ文字列でexec()を複数回呼び出すと、常に最初の一致の情報が返されます。グローバルフラグを設定するとき、exec()への各呼び出しは、文字列内の新しい一致を探し続けます。
var text = 'cat、bat、sat、fat'; var pattern1 =/.at/; var matches = pattern1.exec(text); console.log(matches); // pattern1.lastindex:0 // matches [0]: 'cat' // matches.index:0 // matches.input: 'cat、fat' pattern1.exec(テキスト); console.log(pattern1、matches); //pattern1.lastIndex:0//matches [0]:'cat'//matches.index:0//matches.input:'cat、bat、sat、fat '
var text = 'cat、bat、sat、fat'; var pattern2 = /.at/g; var matches = pattern2.exec(text); console.log(pattern2、matches); //pattern2.lastindex:3//matches [0]:'cat'//matches.index:0//matches.input:'cat、bat、sat、fat'var text = 'cat、bat、fat'; matches = pattart2.exec(text); console.log(pattern2、matches); //pattern2.lastindex:7//matches [0]:'bat'//matches.index:4//matches.input:'cat、bat、sat、fat '
∎ヒントexec()メソッドを使用して、すべての一致する位置とすべての値を見つけます
var String = 'J1H342JG24G234J 3G24J1'; var pattern = // d/g; var valuearray = []; // value var indexArray = []; // position var temp; indexarray.push(temp.index); } // ["1"、 "3"、 "4"、 "2"、 "2"、 "4"、 "2"、 "3"、 "4" 3 "、" 2 "、" 4 "、" 1 "] [1、3、4、4、5、8、9、11、12、13、16、18、19、21] console.log(valuearray、indexarray);
【テスト()】
test()メソッドは、正規式が文字列内の一致テキストを見つけ、文字列パラメーターを受信し、一致するときにtrueを返すことができるかどうかをテストするために使用されます。
var text = '000-00-000'; var pattern = // d {3} - /d {2} - /d {4}/; if(pattern.test(text)){console.log( 'パターンは一致した');}同様に、test()メソッドが呼び出されると、regexpオブジェクトのlastindexプロパティが変更されます。グローバルパターンが指定されている場合、test()メソッドが実行されるたびに、文字列のlastindexオフセット値が一致するように試みます。したがって、異なる文字列が同じregexpで複数回検証されます。 LastIndex値は、各呼び出し後に0に設定する必要があります。
var pattern = /^/d {4} --/d {2} --/d {2 }$/g; console.log(pattern.test('2016-06-23'));//trueconsole.log(pattern.test('2016-06-23') );//false/ /^/d {4} --/d {2} --/d {2} g; console.log(pattern.test('2016-06-23'));/truepattern.lastindex = 0; console.log(pattern.test( '2016-06-23')); // truepertern.lastindex = 0; console.log(pattern.test( '2016-06-23')); // truepattern.lastindex = 0; console.log(pattern.test( '2016-06-23')); // true前述のように、JavaScriptには、キャプチャグループを保存するための9つのコンストラクタープロパティがあります。これらのプロパティは、exec()またはtest()メソッドを呼び出すときに自動的に入力されます。
[注]理論的には、elgexp。式全体に保存する必要がある$ 0は存在しません、値は未定義です
if(/^(/d {4}) - (/d {2}) - (/d {2})$/。test( '2016-06-23')){console.log(regexp。$ 1); // '2016' console.log(regexp。$ 2); console.log(regexp。$ 0); //未定}上記は、JavaScriptタイプSystem_Regex regexpタイプの詳細の詳細な説明です。誰もがwulin.comをサポートすることを願っています〜