js正則属性詳細に加えて踏んだ穴(lastIndex)
14634 ワード
萼葃葃菗葃菗は各RegExpオブジェクトに5つの属性が含まれています.source、global、ignoreCase、multiiline、l a s t I n d e x\color{red}{lastIndex}lastIndex}lastIndex.まず、下五箇の属性を簡単に紹介します. exec()方法は文字列でマッチング検索を実行し、もしマッチングが見つからなかったらnullに戻りますが、マッチングが見つかったら、行列に戻ります. test()test()メソッドは、そのパラメータが文字列であり、test()である文字列を検出し、正規表現の一致結果が含まれるならばtrueを返します.そうでなければfalseを返します.
たとえば:
const reg = /haha/;
console.log(reg.source); //haha
萼葃33751;2.global:読み取り専用のブール値であり、正則表現に修繕符gがあるかどうかを判断する.修繕子gは、大域一致という意味で、文字列のすべてのマッチを検索します.var reg = /haha/;
console.log(reg.global); // false
var reg = /haha/g;
console.log(reg.global); // true
萼萼33751;3.gnoreCase:読み取り専用のブール値であり、正則表現に修装符iがあるかどうかを判断する.修飾子iは、パターンマッチングが大文字と小文字を区別しないことを示している.var reg = /haha/;
console.log(reg.ignoreCase); // false
var reg = /haha/i;
console.log(reg.ignoreCase); // true
萼葃33853;4.multiiline:読み取り専用のブール値であり、正則表現に修羅符mがあるかどうかを判断する.修飾子mは、複数行モードでマッチを実行するためには、^と$の組み合わせが必要であり、文字列全体の開始と終了にマッチする以外に、各行の開始と終了にマッチすることができます.var reg=/haha/;
reg.multiline; // false
var reg=/haha/m;
reg.multiline; // true
((zhi i 5.l a s t I n d e x){lastIndex}last Index:読み取り可能/書き込み可能な整数です.マッチングモードにg修飾子があれば、この属性は文字列全体に次の検索の開始位置に格納されます.この属性はexec()とtest(メソッド)に使用されます.l a s t I n d e x\color{blue}{lastIndex}lastIndexという属性はピットの0.0を踏むことがあります.値を返すときにエラーが発生し、正しい場合もあります.このピットの誤りはgつまり全体の基礎の上に築かれたのです.const reg = /haha/g;
const str = "haha haha"
console.log(reg.exec(str)); //["haha", index: 0, input: "haha haha", groups: undefined]
console.log(reg.lastIndex); //4
console.log(reg.exec(str)); // ["haha", index: 5, input: "haha haha", groups: undefined]
console.log(reg.lastIndex); //9
console.log(reg.exec(str)); //null
console.log(reg.lastIndex); // 0
/* lastIndex , exec( ), lastIndex , exec( ) , lastIndex 0。*/
console.log(reg.exec(str)); // ["haha", index: 0, input: "haha haha", groups: undefined]
console.log(reg.lastIndex); //4
const str="haha haha";
const reg=/haha/g;
console.log(reg.test(str)); // true
console.log(reg.lastIndex);
// 4, JavaScript, lastIndex
console.log(reg.test(str)); // true
console.log(reg.lastIndex);
// 9, JavaScript, lastIndex
console.log(reg.test(str));
// false, lastIndex ,
console.log(reg.lastIndex);
// 0, , lastIndex 0
穴を踏みたくないなら.一つの文字列でパターンマッチングが完了したら、新しい文字列の検索を開始するには、手動でlastIndex属性を0にリセットする必要があります.たとえば:
const str="haha haha";
const reg=/haha/g;
console.log(reg.test(str)); // true
reg.lastIndex=0;
console.log(reg.lastIndex);
// 0,
console.log(reg.test(str)); // true
reg.lastIndex=0;
console.log(reg.lastIndex);
// 0,
console.log(reg.test(str));
// true
reg.lastIndex=0;
console.log(reg.lastIndex);
// 0,
例えば毎回new RegExp();新しいRegExpオブジェクトを作成します.const str="haha haha";
let reg = new RegExp("haha","g");
console.log(reg.test(str)); // true
console.log(reg.lastIndex);
// 4,
reg = new RegExp("haha","g");
console.log(reg.test(str)); // true
console.log(reg.lastIndex);
// 4,
reg = new RegExp("haha","g");
console.log(reg.test(str));
// true
console.log(reg.lastIndex);
// 4,