Duplicar posible:
Interesting test of Javascript RegExp
Regular expression test can't decide between true and false (JavaScript)¿Por qué el mismo RegExp se comporta de manera diferente?
Example of issue. Cuando se ejecutó en línea, los resultados son como esperaba. Pero cuando se almacena como una variable, omite el elemento de tramo medio.
// Inline RegExp
function getToggleClasses() {
var toggler = [],
elements = document.getElementsByTagName("*"),
i=0,
len = elements.length;
for (i; i < len; i++) {
if (/toggler/g.test(elements[i].className)) {
toggler.push(elements[i]);
}
}
document.getElementById('results').innerHTML += "<br />Inline: " + toggler.length;
}
// Variable
function getToggleClasses2() {
var toggler = [],
elements = document.getElementsByTagName("*"),
tester = /toggler/g,
i=0,
len = elements.length;
for (i; i < len; i++) {
if (tester.test(elements[i].className)) {
toggler.push(elements[i]);
}
}
document.getElementById('results').innerHTML += "<br />Variable: " + toggler.length;
}
Marque:
<span class="toggler">A</span>
<span class="toggler">B</span>
<span class="toggler">C</span>
Dado: entiendo que no hay razón para usar una expresión regular para hacer esta comparación y también entender cómo grandes bibliotecas como jQuery son. También sé que el g
no es necesario en este caso.
No puedo entender por qué estos dos métodos alguna vez deberían arrojar resultados diferentes.
Esto es solo una preferencia personal, pero creo que mejoraría la claridad un poco para poner paréntesis alrededor de un literal de expresión regular que tiene indicadores al llamar a una función en el literal. – JAB
@apsillers, tienes razón. ¿Qué buscabas para encontrar esos? No pude averiguar qué buscar para obtener los resultados que buscaba. – Joe
Hice una trampa un poco y busqué '[javascript] regex test lastindex' - Estaba bastante seguro de que una pregunta como esta se había hecho antes, y sabía que la respuesta incluiría el texto' lastIndex'. Este es un buen caso que muestra que la existencia de una pregunta duplicada no es necesariamente una indicación de que el solicitante ha sido negligente; Has hecho una pregunta bien formulada para un problema difícil de buscar. – apsillers