JavaScript引用タイプRegExp基本用法詳細


本論文の実例は、JavaScript参照タイプRegExpの基本的な使い方を説明する。皆さんに参考にしてあげます。具体的には以下の通りです。
1、正規表現の定義
3つのフラグ:グローバルモードgは、大文字小文字モードi、マルチラインモードmを区別しない。
1)字面量定義

var pattern = /[fe]at/gim;

2)コンストラクタの定義:
二つのパラメータを受信します。マッチする文字列モードとオプションのモード文字列(g,i,m)。

var pattern = new RegExp("[fe]at","gim");

注意:
1)マッチする文字列に以下の文字が含まれている場合は、それらを変換しなければなりません(\^&|)?*+.」
2)コンパス関数定義正規表現のパラメータは文字列であるため、文字の時節行を二重に変換する場合があります。文字列ではしばしば\\に変換されますが、正規表現文字列パラメータでは\\\\\となり、字面量モード/\w\hello\123/等価の文字列は\\w\\hello\123となります。
2、RegExpの実例的な属性
  • )globalはgフラグが設定されているかどうかを示しています。
  • )ギノレスはiマークが設定されているかどうかを示しています。
  • )multiilineはmフラグが設定されているかどうかを示しています。
  • toLocaleString())lastIndexは、前回のマッチングが終了した位置、すなわち次回から次の適合項の位置を検索し、0から計算するために使用される。
  • )Sourceは正規表現の文字列表現を返し、文字列の量パターンに従って、着信構造関数の文字列モードではなく、戻ります。
  • 
    var pattern = new RegExp("\\[fe\\]at","i");
    alert(pattern.source);
    
    
    以上のコードは\[fe\]atに戻ります。
    3、RegExp例の方法
    1)相続のtoString()valueOf()toLocaleString()方法toString():正規表現の字面量を返します。正規表現を作成する方法とは関係ありません。valueOf():正規表現の字面量を返します。正規表現を作成する方法とは関係ありません。match():正規表現自体を返します。
    
    var pattern1 = /\[fe\]at/i);
    var pattern2 = new RegExp("\\[fe\\]at","i");
    alert(pattern1.toString()); // /\[fe\]at/i
    alert(pattern1.toLocaleString()); // /\[fe\]at/i
    alert(pattern2.toString()); // /\[fe\]at/i
    alert(pattern2.toLocaleString()); // /\[fe\]at/i
    
    
    2)match()方法
    パラメータ:マッチする正規表現。
    戻り値:exec()の戻り値を区別すると、主にgフラグが設定されているかどうかを見ます。gフラグが設定されていない場合はexec()と等価です。
    a.gフラグを設定すると、すべての整合項目を含む配列が返されます。
    b.gフラグが設定されていない場合は、最初のマッチ項目を含む配列を返します。0番目は正規表現全体にマッチする文字列で、1番目は1番目のサブ表現にマッチするテキストで、2番目は2番目のサブ表現に対応するテキストです。
    3)exec()方法
    パラメータ:モードを適用する文字列。
    戻り値:最初のマッチ情報を含む配列を返します。マッチしていない場合はnullを返します。exec()の戻り値はgフラグに影響されず、gフラグが設定されていない場合、同じ文字列上でexec()を何度も呼び出したら、常に最初のマッチング項目の情報を返します。gフラグが設定されていても、1回に1つのマッチのみを返します。gフラグを設定すると、match()を呼び出すたびに文字列の中で新しいマッチを検索し続けます。lastIndexを駆動して、すべてのマッチングをシミュレーションすることができます。exec()は一回のマッチングですべてのマッチが得られます)。
    返した配列は、追加の2つの属性を含みます。indexとinput。indexは文字列内のマッチする項目の位置を表し、inputは正規表現を適用する文字列を表します。配列では、0番目は正規表現全体にマッチする文字列であり、1番目は1番目のサブ表現にマッチするテキストであり、2番目は2番目のサブ表現と一致するテキストである。
    
    var str = "Shanghai and Beijing and Guangzhou";
    var pattern = /Shanghai ( and Beijing ( and Guangzhou)?)?/gi;
    var match = pattern.exec(str);
    alert(match.index);//0
    alert(match.input);//"Shanghai and Beijing and Guangzhou"
    alert(match[0]);//"Shanghai and Beijing and Guangzhou"
    alert(match[1]);//"and Beijing and Guangzhou"
    alert(match[2]);//"and Guangzhou"
    
    
    gフラグが設定されていない場合、同じ文字列でmatch()を呼び出して、常に最初のマッチ項目の情報を返します。
    
    var str = "fat eat";
    var pattern = /.at/;
    var match = pattern.exec(str);
    alert(match.index);//0
    alert(match.input);//fat eat
    alert(match[0]);//fat
    alert(pattern.lastIndex);//0
    var match = pattern.exec(str);
    alert(match.index);//0
    alert(match.input);//fat eat
    alert(match[0]);//fat
    alert(pattern.lastIndex);//0
    
    
    グローバルフラグgを設定すると、同じ文字列でexec()を呼び出すたびに新しいマッチ項目の情報が戻ります。
    
    var str = "fat eat";
    var pattern = /.at/g;
    var match = pattern.exec(str);
    alert(match.index);//0
    alert(match.input);//fat eat
    alert(match[0]);//fat
    alert(pattern.lastIndex);//3
    var match = pattern.exec(str);
    alert(match.index);//4
    alert(match.input);//fat eat
    alert(match[0]);//eat
    alert(pattern.lastIndex);//7
    
    
    4)  exec()方法
    パラメータ:モードを適用する文字列
    戻り値:パターンがパラメータに一致する場合はtrueを返します。そうでなければfalseを返します。test()方法は、if文でよく用いられる。
    問題:
    正規表現にフラグgがある場合、testを使って異なる文字列をチェックすると、RegExpはtestの前の文字列から導出したlastIndexを使ってtestの後の文字列をチェックします。必ずエラーが発生します。
    
    var pattern = /^[1-9]\d{4,10}$/gi;
    var str = "88888";
    alert(pattern.test(str));//  true
    str = "888888";
    alert(pattern.test(str));//  false
    
    
    解決方法:
    ①正規表現のlastIndex属性を0に設定して検証する
    
    var pattern = /^[1-9]\d{4,10}$/gi;
    var str = "88888";
    alert(pattern.test(str));//  true
    str = "888888";
    pattern.lastIndex=0;
    alert(pattern.test(str));//  true
    
    
    ②正規表現はフラグgを削除します。
    
    var pattern = /^[1-9]\d{4,10}$/i;
    var str = "88888";
    alert(pattern.test(str));//  true
    str = "888888";
    alert(pattern.test(str));//  true
    
    
    5)説明:
    test()exec()は正規表現の方法であり、文字列の方法ではなく、そのパラメータこそ文字列である。test()は、正規表現ではなく文字列の方法であり、そのパラメータが正規表現である。
    ②gフラグが設定されていても、matchは毎回1つのマッチングアイテムだけを返します。gフラグが設定されていない場合、exec()exec()は同じ結果を実行します。gフラグを設定すると、match()はサブ表現を無視して、完全一致正規表現のみを検索します。
    match()exec()の違い:
    a.正規表現にサブ表現がなく、gフラグが設定されていない場合、match()exec()は同じ結果を行い、最初の一致した文字列の内容を返します。
    
    var pattern = new RegExp("cat") ;
    var str = "onecat twocat";
    alert(pattern.exec(str));//  cat
    alert(str.match(pattern));//  cat
    
    
    b.正規表現にサブ表現がなく、gフラグを設定すると、match()は第1のマッチする文字列コンテンツを返し、複数のマッチするコンテンツがある場合、exec()は、すべてのマッチする文字列を含む配列を返します。
    
    var pattern = new RegExp("cat","g") ;
    var str = "onecat twocat";
    alert(pattern.exec(str));//  cat
    alert(str.match(pattern));//  cat,cat
    
    
    c.正規表現にサブ表現があり、gフラグが設定されていない場合、match()exec()は同じ結果を行い、すべてが完全一致正規表現とサブ表現を検索し、完全一致文字列と一致するサブ表現を含む配列を返します。
    
    var pattern = new RegExp("c(at)") ;
    var str = "onecat twocat";
    alert(pattern.exec(str));//  cat,at
    alert(str.match(pattern));//  cat,at
    
    
    d.正規表現にサブ表現があり、gフラグが設定されている場合、match()exec()で実行される結果は異なり、match()ではサブ表現を無視して、完全一致正規表現のみを検索し、すべてのマッチした文字列を含む配列を返します。
    
    var pattern = new RegExp("c(at)","g") ;
    var str = "onecat twocat";
    alert(pattern.exec(str));//  cat,at
    alert(str.match(pattern));//  cat,cat
    
    
    3つのフラグ:グローバルモードgは、大文字小文字モードi、マルチラインモードmを区別しない。
    PS:ここでもう2つの非常に便利な正規表現ツールを提供します。
    JavaScript正規表現はオンラインテストツールです。
    http://tools.jb51.net/regex/javascript
    正規表現のオンライン作成ツール:
    http://tools.jb51.net/regex/create_reg
    もっと多くのJavaScriptに関する内容に興味がある読者は、当駅のテーマを見ることができます。「JavaScript正則表現技術大全書」、「JavaScript代替操作技術のまとめ」、「JavaScript検索アルゴリズムのテクニックのまとめ」、「JavaScriptデータ構造とアルゴリズム技術のまとめ」、「JavaScriptはアルゴリズムと技術の総括を遍歴します。」、「JavaScriptのJson操作技術のまとめ」、「JavaScriptエラーとデバッグテクニックのまとめ」および「JavaScript数学演算の使い方のまとめ
    本論文で述べたように、JavaScriptプログラムの設計に役に立ちます。