javascript正規表現に関する説明

5022 ワード

ストリングスオブジェクト
1、str.match(RegExp)
マッチングされたRegExpの文字列をstrで検索し、1つの配列内に保存して返します.
RegExpがグローバル設定ではない場合(/g)は、一回だけマッチします.
 
  
("abc112dwfwabcwef2abc3wfwabcasqf453abcqwf24j234h").match(/abc\d*/g);
//
["abc112", "abc", "abc3", "abc", "abc"]
この方法では、正規表現がグローバルマッチングモード(gマーク)ではない場合、最初の要素はマッチする文字列、残りは正則でキャプチャされた文字列となり、2つの属性を備えている.
input検出用文字列
indexマッチングの文字列は、文字列の開始位置を検出するために使用されます.
(この2つの属性については、RegExp.exec()メソッドを参照することができます.
2、str.search(regExp)
RegExpにマッチする最初の文字列の位置を返します.マッチしていない場合は-1を返します.グローバルタグは一回だけマッチするので意味がありません.
この方法はまた、regExpのlastIndex属性を無視し、常に文字列の開始から検索する.
3、str.replace(RegExp、replace Text)
RegExpにマッチする文字列をreplace Textに置換します.RegExpにグローバル設定がない場合は、一回だけマッチして、グローバルモードを使用してすべてのマッチした文字列を置換します.
RegExpにキャプチャパケットマッチングが使用されている場合、replace Textの中の$は特別な意味を持つ.
$1、$2、...、$99/RegExpの第1から第99のサブ表現にマッチするテキストです.
$&//regexpにマッチするサブストリング.
サブストリングの左側にあるテキストです.
'//'はピペット列の右側にあるテキストです.
ドル/マッチ$記号自体です.
RegExpで取得したパケットの数を考慮してください.2つの捕獲のみを設定した場合、$3は特別な意味を持たなくなります.
(「123 a b 12 c 11 d_4532」).replace(/a(b\d*)c/,「$1@$2-」)
//を得る:
「123b12@11-_4532"
4、str.replace(RegExp、function)
str.replaceの2番目のパラメータは関数であってもよく、関数の戻り値はマッチング文字の置き換え内容として使用されます.
なお、グローバルマッチングのためのRegExpにはグローバルgフラグが必要です.
関数のパラメータは次の通りです.
マッチする文字列、
設定されたサブストリング(複数)、
文字列の開始位置にマッチします.
マッチする元の文字列
なお、RegExpで取得したパケットの設定数に基づいて関数パラメータの個数を定義してください.パラメータが少なすぎると、「マッチ文字列の開始位置」と「マッチングのための元文字列」がパラメータに表示されなくなります.もちろん、関数内でargmentsオブジェクトを使用してこの問題を解決することもできます.argments(argments.length-2)つまり、文字列にマッチする開始位置であり、argments(argments.length-1)はマッチングのための元の文字列です.
 
  
var newStr = ("123ab12c11d_4532").replace(/a(b\d*)c(\d*)d/g,function(s,s1,s2,pos,oldStr){
return "@"+s1+"@"+s2+"@";
}) ;
//
"123@b12@11@_4532"
5、str.split(RegExp[、limit])
文字列のstrを整合された文字列で配列に分割します.limitは任意で返した行列の長さを定義します.
(「ada 2 afa 4 fcas 6 a fa」).split(/\d/3)/「ada,afa,fcas」
6、RegExp.exec(str)方法
strでマッチする文字列を検索します.この方法を実行するたびにマッチするのは一回だけです.複数のものにマッチするためには、RegExpを/gに設定し、exec()方法を複数回実行します.毎回、レスポンス値regExp=RegExp.exec(str)にマッチします.
resultは配列で、この配列長は1で、配列要素は見つけられた整合的なサブストリングであり、
また、この配列は2つの属性を追加的に与えられました.
result.indexは、元の文字列の開始位置にマッチするサブストリングを表します.
result.inputは元の文字列です.
マッチするサブストリングが二度と見つからない場合は、result=nullを返し、RegExp.lastIndex=0を設定します.
RegExp.lastIndexは正規表現の属性で、現在は文字列のどの位置からマッチし始めますか?初期値は0です.
RegExpがグローバルに設定されている場合は、1つの文字列にマッチした後、同じRegExpを使って新しい文字列をマッチングする場合は、まず手動でRegExp.lastIndex=0を設定してください.
RegExpがグローバルマッチングモードではない場合、プログラムにもう1つのループが書いてあり、基本的なリターン値resultがマッチングを終了するかどうかを決定し、この文字列をマッチングしようとすると、マッチング条件に合致するサブストリングがあれば、必ずデッドサイクルが発生します.その結果、各動作マッチング動作は、最初のサブストリングと一致しており、リターンのresultは空ではなく、比較的容易なエラーである.
 
  
var str = "1Visit W3School, W3School is a place to study web technology.";
var patt = new RegExp("W3School","g");
var result;
document.write(patt.lastIndex+"
");
document.write("=====================================
");
while ((result = patt.exec(str)) != null) {
document.write(patt.lastIndex+"
");
document.write(result.constructor.name+"
");
document.write(result.length+"
");
document.write(result[0]+"
");
document.write(result.index+"
");
document.write(result.input+"
");
document.write("=====================================
");
}
document.write(patt.lastIndex+"
");
// :
=====================================
Array
W3School
Visit W3School, W3School is a place to study web technology.
=====================================
Array
W3School
Visit W3School, W3School is a place to study web technology.
=====================================
7、RegExp.test(「str」)方法
この方法はRegExp.execと同様であり、trueまたはfalseのみを返すことが異なる.
RegExp.lastIndexの意味は同じです.
同じRegExpが先にtest方法とexec方法を使用している場合、RegExp.lastIndex=0を手動で設定する必要があります.これらの方法は同じRegExpオブジェクトのlastIndex属性を共有するものです.
 
  
var str = "1Visit W3School, W3School is a place to study web technology.";
var patt = new RegExp("W3School","g");
var result ;
result = patt.test(str);
alert(result); //true
result = patt.test(str);
alert(result); //true
result = patt.test(str);
alert(result); //false
IE 9+、より新しいバージョンのchrome、firefoxにおいて、str.match(reg)が実行された後、グローバルマッチングがあるかどうかに関わらず、lastindexがリセットされ、reg.lastIndex=0、reg.test(str)が実行された後、正則がグローバルマッチングでない場合、lastindexが再配置され、RE.lastIndex=以下の結果がない限り、IE 8と整合しない.そうでなければ、re.lastIndexは最後のマッチ文字列の末尾文字の位置+1であり、つまり、lastIndexはリセットされていません.