Obtengo contenido html de la API.
El mensaje de muestra podría verse a continuación
Lorem ipsum dolor sit amet <a href="https://example.com">example.com</a> Pellentesque porta ligula et justo condimentum, nec tincidunt libero tempor. Pellentesque nunc justo, tincidunt sit amet suscipit sit amet, auctor <a href="https://google.com">google.com</a>Necesito que mi mensaje se vea en la línea de abajo, texto sin formato con
Lorem ipsum dolor sit amet example.com Pellentesque porta ligula et justo condimentum, nec tincidunt libero tempor. Pellentesque nunc justo, tincidunt sit amet suscipit sit amet, auctor google.comIntenté usar expresiones regulares con grupos, código js a continuación
const r = /^<a href.*>(.*?)<\/a>$/gm let link = `<a href="https://google.com" target="_blank">google.com</a> test <a href="test.com">test.com</a>` let result while((result = r.exec(link)) !== null) { const match = result[1]; link = link.replace(r, match) } console.log(link)También probé un código simple como el siguiente
const r = /^<a href.*>(.*?)<\/a>$/gm let link = `<a href="https://google.com" target="_blank">google.com</a> test <a href="test.com">test.com</a>` link = link.replaceAll(r, "$1") console.log(link)Desafortunadamente, en ambos casos después de ejecutar mi código console.log imprime "test.com", no el mensaje completo.
¿Hay mejores soluciones?
No es necesario hacerlo con una expresión regular. Puede usar DOM para eliminar los enlaces y cualquier otra etiqueta HTML.
const htmlString = `Lorem ipsum dolor sit amet <a href="https://example.com">example.com</a> Pellentesque porta ligula et justo condimentum, nec tincidunt libero tempor. Pellentesque nunc justo, tincidunt sit amet suscipit sit amet, auctor <a href="https://google.com">google.com</a>` const parser = new DOMParser(); const doc = parser.parseFromString(htmlString, "text/html"); const text = doc.body.textContent; console.log(text);Si solo desea eliminar enlaces y dejar otras etiquetas HTML, también es posible.
const htmlString = `Lorem ipsum dolor sit amet <a href="https://example.com">example.com</a> Pellentesque <b>porta</b> ligula <em>et justo</em> condimentum, nec tincidunt libero tempor. Pellentesque nunc justo, tincidunt sit amet suscipit sit amet, auctor <a href="https://google.com">google.com</a>` const parser = new DOMParser(); const doc = parser.parseFromString(htmlString, "text/html"); const anchors = doc.body.querySelectorAll("a"); anchors.forEach(node => node.replaceWith(...node.childNodes)); const htmlWithAnchorsRemoved = doc.body.innerHTML; console.log(htmlWithAnchorsRemoved);El patrón para eliminar todas las etiquetas de anclaje de un texto sería algo como esto:
<a.*?</a>con la etiqueta global.
Buscará específicamente todas las etiquetas de anclaje en su cadena y las comparará globalmente (es decir, en todo el texto que está utilizando). Puede usar esta expresión regular con la función replaceAll de esta manera:
let value = string.replaceAll("<a[^>]*>(.*?)</a>", "");Puedes probar la expresión regular aquí
He probado la cadena dada y el resultado es el siguiente:
Espero que esto ayude. Déjeme saber si usted tiene cualquier pregunta.
Saludos
Usar expresiones regulares para analizar html nunca es un buen camino a seguir. ¿Quizás lo siguiente te ayude?
const html=`Lorem ipsum dolor sit amet <a href="https://example.com">example.com</a> Pellentesque porta ligula et justo condimentum, nec tincidunt libero tempor. Pellentesque nunc justo, tincidunt sit amet suscipit sit amet, auctor <a href="https://google.com">google.com</a>`; function html2text(html){ const o=document.createElement("div"); o.innerHTML=html; return o.textContent; } console.log(html2text(html));