JavaScript引用タイプRegExp基本用法詳細
8193 ワード
本論文の実例は、JavaScript参照タイプRegExpの基本的な使い方を説明する。皆さんに参考にしてあげます。具体的には以下の通りです。
1、正規表現の定義
3つのフラグ:グローバルモードgは、大文字小文字モードi、マルチラインモードmを区別しない。
1)字面量定義
二つのパラメータを受信します。マッチする文字列モードとオプションのモード文字列(g,i,m)。
1)マッチする文字列に以下の文字が含まれている場合は、それらを変換しなければなりません(\^&|)?*+.」
2)コンパス関数定義正規表現のパラメータは文字列であるため、文字の時節行を二重に変換する場合があります。文字列ではしばしば\\に変換されますが、正規表現文字列パラメータでは\\\\\となり、字面量モード/\w\hello\123/等価の文字列は\\w\\hello\123となります。
2、RegExpの実例的な属性)globalはgフラグが設定されているかどうかを示しています。 )ギノレスはiマークが設定されているかどうかを示しています。 )multiilineはmフラグが設定されているかどうかを示しています。 )Sourceは正規表現の文字列表現を返し、文字列の量パターンに従って、着信構造関数の文字列モードではなく、戻ります。
3、RegExp例の方法
1)相続の
パラメータ:マッチする正規表現。
戻り値:
a.gフラグを設定すると、すべての整合項目を含む配列が返されます。
b.gフラグが設定されていない場合は、最初のマッチ項目を含む配列を返します。0番目は正規表現全体にマッチする文字列で、1番目は1番目のサブ表現にマッチするテキストで、2番目は2番目のサブ表現に対応するテキストです。
3)
パラメータ:モードを適用する文字列。
戻り値:最初のマッチ情報を含む配列を返します。マッチしていない場合はnullを返します。
返した配列は、追加の2つの属性を含みます。indexとinput。indexは文字列内のマッチする項目の位置を表し、inputは正規表現を適用する文字列を表します。配列では、0番目は正規表現全体にマッチする文字列であり、1番目は1番目のサブ表現にマッチするテキストであり、2番目は2番目のサブ表現と一致するテキストである。
パラメータ:モードを適用する文字列
戻り値:パターンがパラメータに一致する場合はtrueを返します。そうでなければfalseを返します。
問題:
正規表現にフラグgがある場合、testを使って異なる文字列をチェックすると、RegExpはtestの前の文字列から導出したlastIndexを使ってtestの後の文字列をチェックします。必ずエラーが発生します。
①正規表現のlastIndex属性を0に設定して検証する
①
②gフラグが設定されていても、
③
a.正規表現にサブ表現がなく、gフラグが設定されていない場合、
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プログラムの設計に役に立ちます。
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の実例的な属性
toLocaleString()
)lastIndexは、前回のマッチングが終了した位置、すなわち次回から次の適合項の位置を検索し、0から計算するために使用される。
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プログラムの設計に役に立ちます。