dividir con regexr sin elementos vacíos

1

Quiero que la salida sea así:
['YY', 'RR'] sin elementos vacíos

function pntSq(m){
    let a = m.split(/([A-Z][A-Z])/gi)
    console.log(a)
}
pntSq("YYRR")
//    output :
//    [ '', 'YY', '', 'RR', '' ]
2
0

Puede en matchlugar de usar split.

function pntSq(m){
  return m.match(/[A-Z]{2}/g);
}

console.log(pntSq('YYRR'));
2
  • Pero su respuesta asume que las letras contiguas siempre aparecerían en pares, lo que puede no ser el caso. 13 de oct a las 16:06
  • Mi respuesta asume que la información en la pregunta es correcta, de lo contrario estaría aquí todo el día pensando en casos extremos que no tienen nada que ver con el problema.
    Andy
    13 de oct a las 16:08
0

Enlace: regex101

Esto coincide con 2 letras mayúsculas cualesquiera juntas, pero tenga en cuenta que pueden ser diferentes.

[A-Z]{2}

Hacer coincidir la misma letra mayúscula 2 veces. Esto asegura que sea la misma letra repetida y no letras diferentes.

([A-Z])\1
0

Es posible que JavaScript no admita la división en búsquedas retrospectivas. Una solución alternativa sería hacer esto en dos pasos. Primero podemos reemplazar el siguiente patrón de expresiones regulares:

([A-Z])(?!\1)(?=.)

Esto capturará cualquier capital que, a su vez, vaya seguida de una letra diferente (y tampoco el final de la cadena). Luego, lo reemplazamos con un solo espacio. Como segundo paso, simplemente dividimos el espacio para obtener la matriz de salida que queremos.

function pntSq(m) {
    m = m.replace(/([A-Z])(?!\1)(?=.)/g, "$1 ");
    console.log(m);
    var a = m.split(/ /g);
    console.log(a);
}

pntSq("YYRRAAABBBBBCC");