JavaScriptピットとテクニック:正則lastIndex

1370 ワード

大域gモードでは、testであろうと、execであろうと、変更されたのは同じlastIndexであり、再び一致したのは新しい文字列であっても、lastIndexであろうと、前の変化を引き継ぐことができる.例えば、中間に文字列方法が使用されると、str.match(reg)lastIndexに再開される.
例1:
let str='abc123';
let reg=/\d+/g; //       g,   g           
if(reg.test(str)){
    console.log(reg.lastIndex);  // 6
    console.log(reg.exec(str)); // null    exec           ,    ,      ,            
}
例2:
    let str = 'abc123bba245';
    let reg = /\d+/g;
    console.log(reg.exec(str));  // Array [ "123" ]
    console.log(reg.lastIndex);  // 6
    console.log(reg.exec('af4f59l66')); // Array [ "66" ]
    console.log(reg.lastIndex); // 9
    console.log(reg.exec(str)); // Array [ "245" ]
例3:
    let str = 'abc123bba245';
    let reg = /\d+/g;
    console.log(reg.exec(str));   // Array [ "123" ]
    console.log(reg.lastIndex);  // 6
    console.log(str.match(reg)); // Array [ "123", "245" ]
    console.log(reg.lastIndex); // 0
    console.log(reg.exec('af4f59l66')); // Array [ "4" ]
    console.log(reg.lastIndex); // 3
    console.log(str.replace(reg, '-')); // abc-bba-
    console.log(reg.exec(str)); // Array [ "123" ]