javascriptの中のRegExpのexec関数の総括

2948 ワード

私たちのフロントエンドでは、正規表現を使って文字列を検索します.ちょうどjavascriptでRegExpを提供して正規表現をサポートします.RegExpオブジェクトの主な方法はexec()です. 
構文
RegExpObject.exec(string)
パラメータ
説明
ストリングス
必要です.検索する文字列.
戻り値:
       マッチングの結果を保存する配列を返します.マッチが見つからない場合、戻り値はnullです.
説明:
exec()方法の機能は非常に強く、一般的な方法であり、またtest()法や正規表現を支持するStringオブジェクトを用いる方法よりも複雑である.
exec()がマッチするテキストを見つけたら、結果の行列を返します.Nullを返します.この配列の0番目の要素は正規表現にマッチするテキストで、1番目の要素はRegExpObjectの1番目のサブ表現にマッチするテキストで、2番目の要素はRegExpObjectの2番目のサブ表現にマッチするテキストです.配列要素とlength属性に加えて、exec()方法は2つの属性を返します.index属性宣言は、テキストにマッチする最初の文字の位置です.input属性は検索された文字列stringを格納します.グローバルでないRegExpオブジェクトのexec()メソッドを呼び出したときに戻る配列は、呼び出し方法String.match()と同じであることがわかる.
しかし、RegExpObjectが大域正規表現である場合、exec()の挙動はやや複雑である.RegExpObjectのlastIndex属性で指定された文字から文字列のstringを検索します.exec()が表式にマッチするテキストを見つけた場合、マッチング後、RegExpObjectのlastIndex属性をテキストにマッチする最後の文字の次の位置に設定します.つまり、exec()メソッドを繰り返して呼び出すことで、文字列内のすべてのマッチしたテキストを巡回することができます.exec()がマッチするテキストを見つけられなくなったらnullに戻り、lastIndex属性を0にリセットします.
私たちは主に説明の第三段の内容を見に来ました.
例を見ます
<html>
<body>
<script type="text/javascript">
var str = "Visit W3School, W3School is a place to study web technology."; 
var patt = new RegExp("W3School","g");
var result;
while ((result = patt.exec(str)) != null)  {
  document.write(result);
  document.write("<br />");
  document.write(patt.lastIndex);
  document.write("<br />");
 }
document.write(patt.lastIndex);
</script>
</body>
</html>
運転結果は以下の通りです.
W 3 School 14 W 3 School 240
グローバルモードのラストインデクスでは、文字列のすべての文字を遍歴するまで、最後に0になります.
一つ注意したいのは、
                              ,        lastIndex       0
例は以下の通りです
var str = "Visit W3School, W3School is a place to study web technology."; 
var patt = new RegExp("W3School","g");
var result;
  result=patt.exec(str);
  document.write(result);
  document.write("<br />");
  document.write(patt.lastIndex);
  document.write("<br />");
var aa="W3School sfd sfsf"
var ddResult;
  ddResult= patt.exec(aa);
  document.write(ddResult);
結果は以下の通りです
W 3 School 14 null
最後の出力結果がnullだったのは、初めて一致した結果のlastIndexが14になったからです.第二文字列を検索する時は14の位置から始まります.前の13文字を踊りに行きます.見つけられません.最初から見たいのですが、第二文字列の検索の冒頭にLastIndexを0にします.
結果は、
W 3 School 14 W 3 School
しかし、これは全体的な問題です.局部的には、この問題はありません.上の例の全体を取り除くことができます.
var str = "Visit W3School, W3School is a place to study web technology."; 
var patt = new RegExp("W3School","");
var result;
  result=patt.exec(str);
  document.write(result);
  document.write("<br />");
  document.write(patt.lastIndex);
  document.write("<br />");
var aa="W3School sfd sfsf"
var ddResult;
  ddResult= patt.exec(aa);
  document.write(ddResult);
運転の結果は以下の通りです.
W 3 Schol 0 W 3 Schol