Regex para reemplazar los símbolos, pero no cuando están en una URL
Pregunta
Entonces tengo esta expresión regular:
&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)
Que coincida con todos los & en un bloque de texto
Sin embargo, si tengo esta cadena:
& & & & & <a href="http://localhost/MyFile.aspx?mything=2&this=4">My Text &</a>
---------------------------------------------------------^
...el & marcado también es objetivo, y como lo estoy usando para reemplazar el & con & la URL deja de ser válida:
http://localhost/MyFile.aspx?mything=2&this=4
¡Oh!¿Alguien conoce una forma mejor de codificar los & que son no en una URL.
Solución
No, la dirección URL no se vuelve inválida. El código HTML se convierte en:
<a href="http://localhost/MyFile.aspx?mything=2&this=4">
Esto significa que el código que no haya sido codificado correctamente ahora está codificado correctamente, y la dirección URL real que contiene el enlace es:
http://localhost/MyFile.aspx?mything=2&this=4
Por lo tanto, no es un problema que el carácter & en el código se codifica, por el contrario, el código es correcto ahora.
Otros consejos
En powershell esto se podría hacer como:
$String ='& & & & & <a href="http://localhost/MyFile.aspx?mything=2&this=4">My Text &</a>'
$String -replace '(?<!<[^<>]*)&', "&"
rendimientos
& & & & & <a href="http://localhost/MyFile.aspx?mything=2&this=4">My Text &</a>
Diseccionando la expresión regular:
- La mirada alrededor (?<!....) primero valida que no estás en ninguna etiqueta
- Luego se encuentran y reemplazan todas las cadenas &.