JSの正規表現(五)
7492 ワード
execメソッドの詳細
execメソッドの戻り値
execメソッドが返すのは、結果文字列に一致するのではなく、オブジェクトです.execReg関数を簡単に修正して、実験をすればそれを証明することができます.
結果はresultのタイプがobjectであることを示した.配列に似たオブジェクトです.for inを使用すると、その属性:index input 0がわかります.ここでindexは、元の文字列に一致するインデックスを表す.Inputは入力を表す文字列です.
0は一致結果が1つしかないことを示し、この一致結果を下付き0で参照することができ、この数は変更される可能性があります.値のlengthプロパティを返すことで、一致結果の合計数を知ることができます.
上記の戻り値の解析に基づいて、execReg関数を以下のように変更します.
結果は次のとおりです.
index:0 input:crazy result[0]:c
一致するcの元の文字列のインデックスは0です.
正則的なマッチング結果は1つ、cである.
上記の2つの例から分かるように、戻りオブジェクト[0]は正規表現全体が一致する内容である.後続の要素は、各サブ正規表現の一致です.
execメソッドによる正規表現の更新
execメソッドは、結果オブジェクトを返すと同時に、元の正規表現を更新する可能性があります.これは、正規表現がg修飾子を設定しているかどうかによって決まります.まず2つの例を見てみましょう.
結果:
index:0 input:crazy.com result[0]:crazy.com result[1]:c result[2]:r result[3]:azy.com index:0 input:crazy.com result[0]:crazy.com result[1]:c result[2]:r result[3]:azy.com
すなわち,2回のマッチングの結果はまったく同じであり,インデックスから文字列の先頭のc文字が一致していることがわかる.
gを設定した正規表現の表現を見てみましょう.
index:0 input:ccrazy.com result[0]:c index:1 input:ccrazy.com result[0]:c
2回目に一致するのは文字列の文字列の2番目のbであることがわかる.これがg修飾子の役割であり、execがgと非gの正規表現をどのように区別しているかを見てみましょう.
正規表現にgが設定されていない場合、execメソッドは正規表現に影響を与えません.gが設定されている場合、exec実行後に正規表現のlastIndex属性が更新され、今回の一致後、一致する文字列の次の文字のインデックスが表示されます.次にこの正規表現で文字列をマッチングすると、前回のlastIndexプロパティからマッチングが始まります.つまり、上記の2つの例の結果が異なる理由です.
testメソッド
testメソッドはstrが一致するかどうかを確認し、成功したかどうかを示すためにブール値を返します.同様に簡単なテスト関数を作成します
1.
成功しました.trueを出力します.
2.
失敗、falseの出力
文字列メソッドを使用した正規表現の実行
matchメソッド
形式:str.match(reg);
正規表現のexecメソッドと同様に、inputおよびindexプロパティも同様に配列のオブジェクトを返します.テストに使用する関数を定義します.
結果:
index:0 input:ccrazy.com result[0]:c
execの結果と同じであることがわかります.
しかし、正規表現にg修飾子が設定されている場合、execとmatchの動作は異なります.
义齿
形式:str.replace(reg,’new str’);
str文字列の中でregに一致する部分を「new str」部分コードとして用いる役割を果たし、元の文字列は修正されず、戻り値として返されることに注目すべきである.例:
結果:crazyc
結果:
brazy.bom
g修飾子が設定されているため、bはすべて置き換えられます.
replace関数で$参照サブ正規表現を使用してコンテンツを一致させる
正規表現で最初のサブ正規表現が一致する内容を参照するために1を使用することができるように、replace関数の置換文字でも$1を使用して同じ内容を参照することができます.
例を見てみましょう
実行結果:crazy.crazy.crazy
まず、最初のサブ正規表現がcrazyに一致することを知っています.$1はcrazyを表します.その後、置換文字列を'$1.$に設定します.1.$1'、実は「crazy.crazy.crazy」です.同じように、$2はcom、$3はcnです.
一例を見ると、スペースの前後の2つの単語の順序を逆にします.
searchメソッドとsplitメソッド
同様に、文字列のsearchメソッドとsplitメソッドでも正規表現を使用できます.形式は次のとおりです.
str.search(reg);
searchは正規表現が最初に一致した位置を返します.例:
結果は次のとおりです.
次の例では、最初の単語以外の文字を見つけます.
結果:5
execメソッドの戻り値
execメソッドが返すのは、結果文字列に一致するのではなく、オブジェクトです.execReg関数を簡単に修正して、実験をすればそれを証明することができます.
<script type="text/javascript">
function execReg(reg,str){
var result = reg.exec(str);
alert(typeof result);
}
var reg = /c/;
var str='crazy';
execReg(reg,str);
</script>
結果はresultのタイプがobjectであることを示した.配列に似たオブジェクトです.for inを使用すると、その属性:index input 0がわかります.ここでindexは、元の文字列に一致するインデックスを表す.Inputは入力を表す文字列です.
0は一致結果が1つしかないことを示し、この一致結果を下付き0で参照することができ、この数は変更される可能性があります.値のlengthプロパティを返すことで、一致結果の合計数を知ることができます.
上記の戻り値の解析に基づいて、execReg関数を以下のように変更します.
<script type="text/javascript">
function execReg(reg,str){
var result = reg.exec(str);
document.write('index:'+result.index+'<br />'
+'input:'+result.input+'<br />'
);
for(i=0;i<result.length;i++){
document.write('result['+i+']:'+result[i]+'<br />')
}
}
var reg = /c/;
var str='crazy';
execReg(reg,str);
</script>
結果は次のとおりです.
index:0 input:crazy result[0]:c
一致するcの元の文字列のインデックスは0です.
正則的なマッチング結果は1つ、cである.
<script type="text/javascript">
function execReg(reg,str){
var result = reg.exec(str);
document.write('index:'+result.index+'<br />'
+'input:'+result.input+'<br />'
);
for(i=0;i<result.length;i++){
document.write('result['+i+']:'+result[i]+'<br />')
}
}
var reg = /(\w)(\w)(.+)/;
var str='crazy.com';
execReg(reg,str);
</script>
上記の2つの例から分かるように、戻りオブジェクト[0]は正規表現全体が一致する内容である.後続の要素は、各サブ正規表現の一致です.
execメソッドによる正規表現の更新
execメソッドは、結果オブジェクトを返すと同時に、元の正規表現を更新する可能性があります.これは、正規表現がg修飾子を設定しているかどうかによって決まります.まず2つの例を見てみましょう.
<script type="text/javascript">
function execReg(reg,str){
var result = reg.exec(str);
document.write('index:'+result.index+'<br />'
+'input:'+result.input+'<br />'
);
for(i=0;i<result.length;i++){
document.write('result['+i+']:'+result[i]+'<br />')
}
}
var reg = /(\w)(\w)(.+)/;
var str='crazy.com';
execReg(reg,str);
execReg(reg,str);
</script>
結果:
index:0 input:crazy.com result[0]:crazy.com result[1]:c result[2]:r result[3]:azy.com index:0 input:crazy.com result[0]:crazy.com result[1]:c result[2]:r result[3]:azy.com
すなわち,2回のマッチングの結果はまったく同じであり,インデックスから文字列の先頭のc文字が一致していることがわかる.
gを設定した正規表現の表現を見てみましょう.
<script type="text/javascript">
function execReg(reg,str){
var result = reg.exec(str);
document.write('index:'+result.index+'<br />'
+'input:'+result.input+'<br />'
);
for(i=0;i<result.length;i++){
document.write('result['+i+']:'+result[i]+'<br />')
}
}
var reg = /c/g;
var str='ccrazy.com';
execReg(reg,str);
execReg(reg,str);
</script>
index:0 input:ccrazy.com result[0]:c index:1 input:ccrazy.com result[0]:c
2回目に一致するのは文字列の文字列の2番目のbであることがわかる.これがg修飾子の役割であり、execがgと非gの正規表現をどのように区別しているかを見てみましょう.
正規表現にgが設定されていない場合、execメソッドは正規表現に影響を与えません.gが設定されている場合、exec実行後に正規表現のlastIndex属性が更新され、今回の一致後、一致する文字列の次の文字のインデックスが表示されます.次にこの正規表現で文字列をマッチングすると、前回のlastIndexプロパティからマッチングが始まります.つまり、上記の2つの例の結果が異なる理由です.
testメソッド
testメソッドはstrが一致するかどうかを確認し、成功したかどうかを示すためにブール値を返します.同様に簡単なテスト関数を作成します
1.
<script type="text/javascript">
function testReg(reg,str){
alert(reg.test(str));
}
var reg = /c/;
var str='ccrazy.com';
testReg(reg,str);
</script>
成功しました.trueを出力します.
2.
<script type="text/javascript">
function testReg(reg,str){
alert(reg.test(str));
}
var reg = /c/;
var str='ccrazy.com';
testReg(reg,str);
</script>
失敗、falseの出力
文字列メソッドを使用した正規表現の実行
matchメソッド
形式:str.match(reg);
正規表現のexecメソッドと同様に、inputおよびindexプロパティも同様に配列のオブジェクトを返します.テストに使用する関数を定義します.
<script type="text/javascript">
function matchReg(reg,str){
var result = str.match(reg);
if(result ){
document.write('index:'+result.index+'<br />'
+'input:'+result.input+'<br />'
);
for(i=0;i<result.length;i++){
document.write('result['+i+']:'+result[i]+'<br />')
}
}else{
alert('null: !')
}
}
var reg = /c/;
var str='ccrazy.com';
matchReg(reg,str);
</script>
結果:
index:0 input:ccrazy.com result[0]:c
execの結果と同じであることがわかります.
しかし、正規表現にg修飾子が設定されている場合、execとmatchの動作は異なります.
义齿
形式:str.replace(reg,’new str’);
str文字列の中でregに一致する部分を「new str」部分コードとして用いる役割を果たし、元の文字列は修正されず、戻り値として返されることに注目すべきである.例:
<script type="text/javascript">
var reg = /b/;
var str = 'crazyb';
var newStr = str.replace(reg,'c');
document.write(newStr);
</script>
結果:crazyc
<script type="text/javascript">
var reg = /c/g;
var str = 'crazy.com';
var newStr = str.replace(reg,'b');
document.write(newStr);
</script>
結果:
brazy.bom
g修飾子が設定されているため、bはすべて置き換えられます.
replace関数で$参照サブ正規表現を使用してコンテンツを一致させる
正規表現で最初のサブ正規表現が一致する内容を参照するために1を使用することができるように、replace関数の置換文字でも$1を使用して同じ内容を参照することができます.
例を見てみましょう
<script type="text/javascript">
var reg=/(\w+).(\w+).(\w+)/
var str = 'crazy.com.cn';
var newStr = str.replace(reg,'$1.$1.$1');
document.write(newStr);
</script>
実行結果:crazy.crazy.crazy
まず、最初のサブ正規表現がcrazyに一致することを知っています.$1はcrazyを表します.その後、置換文字列を'$1.$に設定します.1.$1'、実は「crazy.crazy.crazy」です.同じように、$2はcom、$3はcnです.
一例を見ると、スペースの前後の2つの単語の順序を逆にします.
searchメソッドとsplitメソッド
同様に、文字列のsearchメソッドとsplitメソッドでも正規表現を使用できます.形式は次のとおりです.
str.search(reg);
searchは正規表現が最初に一致した位置を返します.例:
<script type="text/javascript">
var reg = /big/;
var str = 'crazybig';
var pos = str.search(reg);
document.write(pos);
</script>
結果は次のとおりです.
次の例では、最初の単語以外の文字を見つけます.
<script type="text/javascript">
var reg = /\W/;
var str = 'crazy.com.cn';
var pos = str.search(reg);
document.write(pos);
</script>
結果:5