Estoy tratando de extraer todos los enlaces de un sitio web que tiene "Volumen", "Volumen 1" o "Volumen 1:" antes del enlace real. Actualmente, con el código que tengo (consulte a continuación), obtendrá todos los enlaces, incluidas imágenes, emojis y otras cosas.
Nota: en este momento, solo está seleccionando los enlaces y no se enfoca en las etiquetas ni nada, pero si tuviera que verificar el "volumen" o similar, también tendría que verificar las etiquetas (por ejemplo, volumen 1 <a href='liink'> )
Páginas que puede usar para probar: 0 , 1 , 2
Actualmente, tengo este código:
const urlRegex = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&\/\/=]*)/g; document.querySelector(".inner").outerHTML.match(urlRegex); Selecciona el elemento inner y obtiene todo su HTML en una cadena. Luego intentará analizar todos los enlaces de la cadena. Pero también incluye todas las imágenes y otras cosas que no quiero aparte de los datos reales (volúmenes).
Si está confundido acerca de lo que quiero, entonces, por ejemplo, tenemos esto:
<br>volume 1 <a ... /a><br> <br>image <a ... /a><br>Solo quiero obtener el enlace del volumen 1. Hay alguna manera de prevenirlo?
Debe colocar la coincidencia deseada entre una búsqueda anticipada positiva y una búsqueda retrospectiva positiva:
let html = `<br>volume 1 <a href="https://www.google.com" /a><br>\n<br>image <a href="https://www.facebook.com" /a><br>` let links = html.match(/(?<=volume.*?href=\").*?(?=\")/ig); console.log(links);Expresión explicada:
(?<=...) es una mirada positiva hacia atrás. Afirma que lo que sigue está precedido por lo que va dentro (el ... , que es volume.*?href=\" en la expresión anterior).volume coincide con la palabra "volumen" literalmente. Tenga en cuenta que todas las coincidencias aquí no distinguen entre mayúsculas y minúsculas debido a la marca i al final..*? coincide con cualquier carácter cero o más veces, sin ser codicioso. Por lo tanto, coincidiría con cualquier carácter hasta llegar a la siguiente expresión.href=\" coincide con href=" literalmente..*? de nuevo, coincide con cualquier carácter entre cero y un número infinito de veces sin codicia.(?=\") es una anticipación positiva. Afirma que lo que viene antes es seguido por " .Puede encontrar una explicación aún mejor aquí: https://regex101.com/r/SOB1Gi/1 .
En resumen, esta expresión coincide con cualquier enlace que aparece después de la palabra volumen.