js正則属性詳細に加えて踏んだ穴(lastIndex)


萼葃葃菗葃菗は各RegExpオブジェクトに5つの属性が含まれています.source、global、ignoreCase、multiiline、l a s t I n d e x\color{red}{lastIndex}lastIndex}lastIndex.まず、下五箇の属性を簡単に紹介します.
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つまり全体の基礎の上に築かれたのです.
  • exec()方法は文字列でマッチング検索を実行し、もしマッチングが見つからなかったらnullに戻りますが、マッチングが見つかったら、行列に戻ります.
  • test()test()メソッドは、そのパラメータが文字列であり、test()である文字列を検出し、正規表現の一致結果が含まれるならばtrueを返します.そうでなければfalseを返します.
  • 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,