MDN dice:¿Qué significa regex 'flag' y 'do?
para realizar una búsqueda "pegajosa", que partidos a partir de la posición actual en la cadena objetivo, utilizan el y bandera.
No lo entiendo del todo.
MDN dice:¿Qué significa regex 'flag' y 'do?
para realizar una búsqueda "pegajosa", que partidos a partir de la posición actual en la cadena objetivo, utilizan el y bandera.
No lo entiendo del todo.
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ó.
puede encontrar un ejemplo aquí:
Excepto que en mi humilde opinión el ejemplo debería ser
var regex = /^(\S+) line\n?/y;
en lugar de
var regex = /(\S+) line\n?/y;
ya que con esta línea del código da el mismo resultado si usted dice
var regex = /(\S+) line\n?/y;
o
var regex = /(\S+) line\n?/g;