¿Por qué devuelve verdadero para
const regex = /\+\+\+\+/gm; let test = `+++` if (test.matchAll(regex)) { alert(true) } else { alert(false) }Según los documentos :
El método matchAll() devuelve un iterador de todos los resultados que coinciden con una cadena con una expresión regular, incluida la captura de grupos. - MDN
Entonces, si hay una coincidencia o no, devolverá un objeto iterador.
En su caso, no habrá una coincidencia y devolverá un iterador y se considera como un valor truthy .
Puede obtener todos los resultados y recopilarlos en una matriz y luego verificar la longitud de esa matriz para verificar la coincidencia como:
const matches = [...test.matchAll(regex)]; Si no hay ninguna coincidencia, las matches serán una matriz vacía
const regex = /\+\+\+\+/gm; let test = `+++`; const matches = [...test.matchAll(regex)]; console.log(matches); if (matches.length) { console.log(true); } else { console.log(false); }Si hay una coincidencia, las coincidencias serán una matriz de coincidencias.
const regex = /\+\+\+\+/gm; let test = `++++`; const matches = [...test.matchAll(regex)]; console.log(matches); if (matches.length) { console.log(true); } else { console.log(false); }matchAll devuelve un iterador que, cuando se fuerza a un valor booleano, es true .
¿Quizás quisiste decir match ?
const regex = /\+\+\+\+/gm; let test = `+++` if (test.match(regex)) { console.log(true) } else { console.log(false) } Aunque para este propósito, RegExp.test() es mejor:
const regex = /\+\+\+\+/gm; let test = `+++` if (regex.test(test)) { console.log(true) } else { console.log(false) }