2010-12-27 20 views

Respuesta

30

Los objetos de expresión regular tienen una propiedad lastIndex, que se utiliza de diferentes formas dependiendo de los indicadores g (global) y y (adhesivo). El indicador y (adhesivo) le dice a la expresión regular que busque una coincidencia en lastIndex y solo en lastIndex (no anterior o posterior en la cadena).

Ejemplos de ello son por valor de 1.024 palabras:

var str = "a0bc1"; 
 
// Indexes:
 

 
var rexWithout = /\d/; 
 
var rexWith = /\d/y; 
 

 
// Without: 
 
rexWithout.lastIndex = 2;   // (This is a no-op, because the regex 
 
            // doesn't have either g or y.) 
 
console.log(rexWithout.exec(str)); // ["0"], found at index 1, because without 
 
            // the g or y flag, the search is always from 
 
            // index 0 
 

 
// With, unsuccessful: 
 
rexWith.lastIndex = 2;    // Says to *only* match at index 2. 
 
console.log(rexWith.exec(str)); // => null, there's no match at index 2, 
 
            // only earlier (index 1) or later (index 4) 
 

 
// With, successful: 
 
rexWith.lastIndex = 1;    // Says to *only* match at index 1. 
 
console.log(rexWith.exec(str)); // => ["0"], there was a match at index 1. 
 

 
// With, successful again: 
 
rexWith.lastIndex = 4;    // Says to *only* match at index 4. 
 
console.log(rexWith.exec(str)); // => ["1"], there was a match at index 4.
.as-console-wrapper { 
 
    max-height: 100% !important; 
 
}


Nota de compatibilidad:

motor SpiderMonkey JavaScript de Firefox ha tenido la bandera y durante años, pero no era parte de la especificación hasta ES2015 (Junio ​​de 2015). Además, durante bastante tiempo Firefox tenía a bug in the handling of the y flag con respecto a la aserción ^, pero se corrigió en algún lugar entre Firefox 43 (tiene el error) y Firefox 47 (no lo hace). Las versiones muy antiguas de Firefox (digamos, 3.6) tenían y y no tenían el error, por lo que era una regresión que ocurrió más tarde (comportamiento no definido para el indicador y), y luego se corrigió.

Cuestiones relacionadas