Tengo un texto y quiero resumirlo, quiero cambiar esta matriz:
matriz 1
[ 'CALX', '11.10', '21', '01', '08', 'EGLD', 'USDT', 'LDFDFC', 'ZONE', '238.5', '233', 'LEVERAGE', '3', 'X', 'TARGET', '1', '243.9', 'TARGET', '2', '248', 'TARGET', '3', '254', 'TARGET', '4', '260', 'H', 'GD', 'S', 'AFCA' ]a esto: Matriz 2
[ 'CALX', '11.10', '21', '01', '08', 'EGLDUSDTLDFDFCZONE', '238.5', '233', 'LEVERAGE', '3', 'XTARGET', '1', '243.9', 'TARGET', '2', '248', 'TARGET', '3', '254', 'TARGET', '4', '260', 'HGDSAFCA', ]como puede ver, quiero que todas las letras se mantengan juntas hasta que lleguen a un número, y cada número debe estar en un elemento de la matriz
Este es el código que se puede usar para convertir texto en un Array1
const input = 'CALX, [11.10.21 01:08] $EGLD/USDT #Ldfdfc zone : 238.5 - 233 "LEVERAGE" : 3x TARGET1 : 243.9 TARGET 2 : 248 TARGET 3 : 254 TARGET 4 : 260 h.gd.s afca. `~!@#$%^&*()_-+=-/?><' const text = text.toUpperCase().match(/[az]+|\d+(?:\.\d+)?/gi);Entonces, ¿cómo puedo cambiar Array1 a Array2 ?
lo siento por mi inglés y gracias por su ayuda.
Según la cadena inicial, para obtener la matriz deseada como salida, no tiene que convertirla en una matriz para procesarla nuevamente.
Puedes usar un patrón similar al que probaste con una alternancia | pero en lugar de hacer coincidir [az]+ , puede capturar 1 o más dígitos usando (\D+) en un grupo.
Luego, en la devolución de llamada de reemplazo, puede eliminar los caracteres no deseados si hay una coincidencia para el grupo 1. Los caracteres no deseados son [\W_]+ o uno más caracteres que no son palabras, incluido el guión bajo.
Si no hay un grupo, puede devolver la coincidencia (los dígitos) entre los delimitadores, donde luego puede dividir los delimitadores para crear la matriz final.
const input = 'CALX, [11.10.21 01:08] $EGLD/USDT #Ldfdfc zone : 238.5 - 233 "LEVERAGE" : 3x TARGET1 : 243.9 TARGET 2 : 248 TARGET 3 : 254 TARGET 4 : 260 h.gd.s afca. `~!@#$%^&*()_-+=-/?><' text = input .toUpperCase() .replace(/\d+(?:\.\d+)?|(\D+)/g, (m, g1) => g1 ? g1.replace(/[\W_]+/g, '') : `#${m}#` ); console.log(text.split(/#+/));Una de las soluciones podría verse así:
let arr = [ 'CALX', '11.10', '21', '01', '08', 'EGLD', 'USDT', 'LDFDFC', 'ZONE', '238.5', '233', 'LEVERAGE', '3', 'X', 'TARGET', '1', '243.9', 'TARGET', '2', '248', 'TARGET', '3', '254', 'TARGET', '4', '260', 'H', 'GD', 'S', 'AFCA' ] function handleArray(a) { let result = []; let stringItem = ''; a.forEach((el) => { // If number then check if we have previous string and push // it to the result. // Also push number as next element if (/\d/.test(el)) { if (stringItem) { result.push(stringItem); // Clear string variable stringItem = ''; } result.push(el) } else { // Concat ongoing string, don't push to result stringItem += el; } }) return result; } console.log(handleArray(arr))