JS正規表現修飾子global(/g)の使用状況分析

高洛峰
リリース: 2017-01-09 15:35:03
オリジナル
1471 人が閲覧しました

この記事の例では、JS 正規表現修飾子 global(/g) の使用法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

/g 修飾子はグローバル マッチングを表し、最初の一致を見つけた後に停止するのではなく、すべての一致を検索します。まずは古典的なコードを見てみましょう:

var str = "123#abc";
var noglobal = /abc/i;//非全局匹配模式
console.log(re.test(str)); //输出ture
console.log(re.test(str)); //输出ture
console.log(re.test(str)); //输出ture
console.log(re.test(str)); //输出ture
var re = /abc/ig;//全局匹配
console.log(re.test(str)); //输出ture
console.log(re.test(str)); //输出false
console.log(re.test(str)); //输出ture
console.log(re.test(str)); //输出false
ログイン後にコピー

/g モードを使用すると、RegExp.test() を複数回実行したときの出力結果が異なることがわかります。

正規表現オブジェクトを作成するときに、「g」識別子が使用されているか、その ?global 属性値が true に設定されている場合、新しく作成された正規表現オブジェクトは、一致する文字列をグローバル化するためにパターンを使用します。グローバル マッチング モードでは、指定された文字列に対して複数のマッチングを実行して検索できます。各一致では、現在の通常オブジェクトの lastIndex 属性の値を開始位置として使用して、ターゲット文字列の検索を開始します。 lastIndex 属性の初期値は 0 です。一致する項目が見つかった後、lastIndex の値は、文字列内の一致するコンテンツの次の文字の位置インデックスにリセットされます。これは、検索を開始する位置を識別するために使用されます。次回試合が行われるとき。一致する項目が見つからない場合、lastIndex の値は 0 に設定されます。通常のオブジェクトのグローバル一致フラグが設定されていない場合、lastIndex 属性の値は常に 0 であり、一致が実行されるたびに、文字列内で最初に一致する項目のみが見つかります。

次のコードを通じて、/g モードでの lastIndex のパフォーマンスを検証できます:

var str = "012345678901234567890123456789";
var re = /123/g;
console.log(re.lastIndex); //输出0,正则表达式刚开始创建
console.log(re.test(str)); //输出ture
console.log(re.lastIndex); //输出4
console.log(re.test(str)); //输出true
console.log(re.lastIndex); //输出14
console.log(re.test(str)); //输出ture
console.log(re.lastIndex); //输出24
console.log(re.test(str)); //输出false
console.log(re.lastIndex); //输出0,没有找到匹配项被重置
ログイン後にコピー

上記では、RegExp.test() 関数に対する /g モードの影響を見てきましたが、次に RegExp.exec への影響を見てみましょう。 () 関数 影響力。 RegExp.exec() は、一致する結果を含む配列を返します。一致するものが見つからない場合、戻り値は null になります。

var str = "012345678901234567890123456789";
var re = /abc/;
//exec没有找到匹配
console.log(re.exec(str));//null
console.log(re.lastIndex);//0
ログイン後にコピー
var str = "012345678901234567890123456789";
var re = /123/;
var resultArray = re.exec(str);
console.log(resultArray[0]);//匹配结果123
console.log(resultArray.input);//目标字符串str
console.log(resultArray.index);//匹配结果在原始字符串str中的索引
ログイン後にコピー

RegExp.exec メソッドの場合、g が追加されない場合は、何回実行されても最初に一致したものが返されます。g が追加された場合は、最初に一致したものが返されます。最初に一致し、その後実行により 2 番目の一致が返される、というように続きます。

var str = "012345678901234567890123456789";
var re = /123/;
var globalre = /123/g;
//非全局匹配
var resultArray = re.exec(str);
console.log(resultArray[0]);//输出123
console.log(resultArray.index);//输出1
console.log(globalre.lastIndex);//输出0
var resultArray = re.exec(str);
console.log(resultArray[0]);//输出123
console.log(resultArray.index);//输出1
console.log(globalre.lastIndex);//输出0
//全局匹配
var resultArray = globalre.exec(str);
console.log(resultArray[0]);//输出123
console.log(resultArray.index);//输出1
console.log(globalre.lastIndex);//输出4
var resultArray = globalre.exec(str);
console.log(resultArray[0]);//输出123
console.log(resultArray.index);//输出11
console.log(globalre.lastIndex);//输出14
ログイン後にコピー

/g マッチング モードを使用すると、ループを通じてすべての一致を取得できます。

var str = "012345678901234567890123456789";
var globalre = /123/g;
//循环遍历,获取所有匹配
var result = null;
while ((result = globalre.exec(str)) != null)
{
 console.log(result[0]);
 console.log(globalre.lastIndex);
}
ログイン後にコピー

この記事が JavaScript プログラミングの皆様のお役に立てれば幸いです。

JS 正規表現修飾子 global(/g) の使用分析に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート