Estoy obteniendo algunos datos de una API. Uno de los resultados es esta cadena:
| Puntos de experiencia | Nivel | Bono de competencia |
He estado tratando de usar RegEx con replace() para tener cada cadena entre | | en una etiqueta. Hasta ahora pude tener el primero y el último dentro de la etiqueta, pero no puedo tener la cadena del medio dentro de la etiqueta. ¿Puede alguien señalar lo que estoy haciendo mal y tal vez ayudarme con una solución? He estado atrapado en esto durante días. Realmente lo apreciaría.
Esto es lo que he hecho hasta ahora:
replace(/\|\s(\D*?)\|/g, "<span>$1</span>")Me da el siguiente resultado:
<span> Experience Points </span> Level <span> Proficiency Bonus </span>Esto es lo que espero:
<span> Experience Points </span> <span> Level </span> <span> Proficiency Bonus </span>Gracias a todos por la ayuda.
const input = "| Experience Points | Level | Proficiency Bonus |"; const output = input.split(/\s*\|\s*/).filter(s => s.length > 0).map(s => `<span>${s}</span>`).join(""); console.log(output);...o simplemente:
const input = "| Experience Points | Level | Proficiency Bonus |"; const output = input.replaceAll(" | ", "</span><span>").replace("| ", "<span>").replace(" |", "</span>"); console.log(output); Si necesita espacios entre los <span> s, entonces:
.join("") con .join(" ") , y"</span><span>" con "</span> <span>" .Usando su patrón RegEx...
Hazlo en 2 pasadas:
// 1st pass var str = "| Experience Points | Level | Proficiency Bonus |"; var intermediateResult = str.replace(/\|\s(\D*?)\|/g, "</span> <span> $1</span> <span>"); // intermediate result: // </span> <span> Experience Points </span> <span> Level </span> <span> Proficiency Bonus </span> <span> // 2nd pass var result = intermediateResult.replace(/^(<\/span> )|( <span>)$/g, "") // result: // <span> Experience Points </span> <span> Level </span> <span> Proficiency Bonus </span>o en 1 línea:
var str = "| Experience Points | Level | Proficiency Bonus |"; var result = str.replace(/\|\s(\D*?)\|/g, "</span> <span> $1</span> <span>").replace(/^(<\/span> )|( <span>)$/g, "")Usando un patrón RegEx diferente:
var result = str.replace(/\|/g, "<span> </span>").replace(/^<span>|<\/span>$/g, "")