Tengo una cadena como esta:
"|hello| + |world| / |again|"
Y necesito obtener las subcadenas dentro del |
y devolver una matriz como esta:
["hello", "world", "again"]
¿Cuál es el mejor enfoque para lograr esto?
Puede usar una expresión regular que busca grupos que consisten solo en letras ( ([A-Za-z])
) entre tuberías ( /|
) donde las tuberías se omitirán de la coincidencia real (envueltas con (?:)
))-- luego use .matchAll
para obtener todas las coincidencias y .map
el resultado para obtener solo los grupos capturados (se omiten las no capturas); consulte a continuación:
const str = "|hello| + |world| / |again|"; const re = /(?:\|)([A-Za-z]+)(?:\|)/g; const results = [...str.matchAll(re)].map((entry) => entry[1]); console.log(results);
Esto funcionará para hacer coincidir solo aquellas palabras que están entre tuberías. Si tiene otras palabras en su cadena que no están envueltas entre tuberías, se ignorarán. Como el siguiente fragmento:
const str = "|hello| + |world| / |again| how are |you| doing?"; const re = /(?:\|)([A-Za-z]+)(?:\|)/g; const results = [...str.matchAll(re)].map((entry) => entry[1]); console.log(results);
array = []; let name = ""; let input = "|hello| + |world| / |again|"; let index = 0; let isStart = false; while (index < input.length) { if (input[index] == '|') { isStart = !isStart; if (!isStart) { array.push(name); name = ""; } } else { if (isStart) { name = name + input[index]; } } index++; } console.log(array);
Si esa cadena no cambia de formato, use una expresión regular para que match
con varias letras minúsculas.
const str = '|hello| + |world| / |again|'; const regex = /[az]+/g; console.log(str.match(regex));