Desde la página RegExp.exec en MDN, ofrece el siguiente ejemplo de iteración a través de una coincidencia con el indicador g establecido:
const regex1 = RegExp('foo*', 'g'); const str1 = 'table football, foosball'; let array1; while ((array1 = regex1.exec(str1)) !== null) { console.log(`Found ${array1[0]}. Next starts at ${regex1.lastIndex}.`); // expected output: "Found foo. Next starts at 9." // expected output: "Found foo. Next starts at 19." } Tengo dos preguntas sobre este código. La primera es por qué aquí se usa !=== null , ¿por qué el bucle while no se codifica correctamente como:
while (array1 = regex1.exec(str1)) { // implicitly casts to boolean? console.log(`...`); } Lo anterior me parece mucho más legible, pero me preguntaba por qué los documentos de MDN usaron el primer enfoque. Segundo, ¿es posible declarar y definir la variable directamente en el ciclo while ? Algo como:
while (let array1 = regex1.exec(str1)) { // don't need the `let array1` above? console.log(`...`); }¿O eso no es compatible con el lenguaje JS?
¿Por qué se usa el
!== nullaquí...?
Es cierto que en este caso no es necesario. .exec() devuelve una matriz o un null , y dado que las matrices siempre son verdaderas, no hay necesidad de compararlas explícitamente con un null .
¿Es posible declarar y definir la variable directamente en el ciclo while?
No. Si quieres eso, recurre al bucle for , que admite esto:
for (let array1; array1 = regex1.exec(str1); null) { console.log(`...`); } De hecho, esto tiene la ventaja de que array1 tiene un alcance más restringido. NB: proporcioné null para enfatizar que la tercera parte del encabezado for no se usa intencionalmente.