enchufe desvergonzado:.. usted puede mirar aquí (regular expression replace a word by a link) en busca de inspiración
.
La pregunta solicitada para reemplazar algunas palabras con un cierto enlace, a menos que ya haya un enlace. Entonces, el problema que tienes es más o menos lo mismo.
Todo lo que necesita es una expresión regular que coincida con una URL (en lugar de la palabra). La suposición más simple sería la siguiente: una URL (opcionalmente) comienza con "http://"
, "ftp://"
o "mailto:"
y dura mientras no haya espacios en blanco, saltos de línea, corchetes de etiquetas o comillas).
Cuidado, largo regex por delante. Aplicar sin distinción de mayúsculas y minúsculas.
(href\s*=\s*['"]?)?((?:http://|ftp://|mailto:)?[^.,<>"'\s\r\n\t]+(?:\.(?![.<>"'\s\r\n])[^.,!<>"'\s\r\n\t]+)+)
Ten cuidado - esto también coincidirá con direcciones URL que son técnicamente inválido, y que reconocerán things.formatted.like.this como una dirección URL. Depende de tus datos si es demasiado insensible. Puedo ajustar la expresión regular si tiene ejemplos donde devuelve falsos positivos.
La expresión regular generará dos grupos de coincidencias. El Grupo 2 contendrá la coincidencia, que probablemente sea una URL. El Grupo 1 contendrá una cadena vacía o 'href="'
. Puede usarlo como un indicador de que esta coincidencia se produjo dentro de un parámetro href de un enlace existente y no tiene que tocar eso.
Una vez que confirme que esto hace lo correcto para usted la mayor parte del tiempo (con datos proporcionados por el usuario, nunca puede estar seguro), puede hacer el resto en dos pasos, como lo propuse en el otro pregunta:
- Hacer un vínculo en cada URL que hay (a menos hay algo en el grupo 1 partido!) Este se producen dobles anidados
<a>
etiquetas para las cosas que tienen un enlace ya.
- Scan para incorrectamente anidados
<a>
etiquetas, la eliminación de la más interna
He añadido un = a la (? ]) al inicio para no romper link etiquetas de anclaje (no citados). Nice regex btw :) – Joel
@Joel: ¿Estás seguro de que quieres que ese lookbehind signifique "Afirmar que es imposible hacer coincidir un punto, un asterisco, una comilla o un corchete de ángulo de cierre antes de la posición actual en la cadena"? –