Si entiendo claramente, en este ejemplo, la match encuentra todas las cadenas con longitud 0. Y las cadenas vacías están al principio, al final y entre todos los símbolos en la cadena, por lo que hay 11 cadenas vacías.
const str = '0123456789'; const regexp = /|/g; const matches = str.match(regexp); console.log('Length = ' + matches.length); console.log(matches);En este ejemplo todo está claro. Solo busco dígitos para que haya 10 dígitos:
const str = '0123456789'; const regexp = /\d/g; const matches = str.match(regexp); console.log('Length = ' + matches.length); console.log(matches);Pero no entiendo por qué no puedo obtener 21 coincidencias cuando trato de combinar 2 expresiones regulares:
const str = '0123456789'; const regexp1 = /|\d/g; const matches1 = str.match(regexp1); console.log('Length = ' + matches1.length); console.log(matches1); const regexp2 = /\d|/g; const matches2 = str.match(regexp2); console.log('Length = ' + matches2.length); console.log(matches2);¿Por qué no puedo obtener 21 coincidencias cuando trato de combinar las 2 expresiones regulares?
Porque .match() devuelve coincidencias que no se superponen . No cubrirá el mismo carácter (en cada posición) con múltiples coincidencias, y para coincidencias vacías no devolverá múltiples coincidencias que comiencen en el mismo índice.