Javascript regex negativo lookbehind no funciona en firefox
regex-lookarounds (3)
Necesito modificar la siguiente expresión regular de javascript porque la mirada negativa hacia atrás arroja un error en firefox:
content = content.replace(/(?![^<]*>)(?:[/"])([^"]*?)(?<!=)(?:[/"])(?!>)/g, ''„$1“'');
¿Alguien tiene una idea y me puede ayudar?
¡Gracias por adelantado!
El equivalente exacto de su expresión regular
(?![^<]*>)"([^"]*?)(?<!=)"(?!>)
sin la afirmación retrospectiva es:
(?![^<]*>)"((?:[^"=]+|=(?!"))*)"(?!>)
Versión legible
(?! [^<]* > )
"
( # (1 start)
(?:
[^"=]+
|
=
(?! " )
)*
) # (1 end)
"
(?! > )
Tenga en cuenta que esto no es como su respuesta elegida, que no es equivalente.
Las afirmaciones retrospectivas son parte de ES2018. Todavía no son compatibles con Firefox, por eso está recibiendo un error.
Chrome los admite desde la versión 62 , y puede usarlos en Node.js> = 6.4 con el indicador de armonía, o en> = 9 sin ningún indicador.
Puede consultar la propuesta here y el soporte del navegador here
Los Lookbehinds solo están disponibles en navegadores compatibles con el estándar ECMA2018, y eso significa que solo las últimas versiones de Chrome pueden manejarlos.
Para admitir la mayoría de los navegadores, convierta su patrón para usar solo lookaheads.
La mirada hacia atrás negativa
(?<!=)
Asegura que no haya un
=
inmediatamente a la izquierda de la ubicación actual.
[^"]
es el átomo que coincide con ese carácter (tenga en cuenta que
?
cuantificador lo hace opcional, pero
"
eso es antes de
[^"]
no puede ser
=
y no es necesario restringir esa posición).
Entonces, puedes usar
content = content.replace(/(?![^<]>)"([^"=]?)"(?!>)/g, ''„$1"'');
^^^^^
Tenga en cuenta que
(?:[/"])
Es igual a
"
.
[^"=]?
coincide con 1 o 0 apariciones de un carácter distinto de
"
y
=
.