¿Qué sabor de Regex usa Visual Studio Code?

130

Intentando buscar-reemplazar en Visual Studio Code, encuentro que su sabor Regex es diferente de Visual Studio completo. Específicamente, trato de declarar un grupo con nombre con el string (?<p>[\w]+)que funciona en Visual Studio pero no en Visual Studio Code. Se quejará con el error Invalid group.

Además de resolver este problema específico, estoy buscando información sobre el sabor de Regexes en Visual Studio Code y dónde encontrar documentación al respecto, para poder ayudarme con cualquier otra pregunta con la que pueda tropezar.

Full Visual Studio usa expresiones regulares .NET como se documenta aquí . Este enlace se menciona como la documentación para VS Code en otro lugar de Stackoverflow, pero no lo es.

Eric
fuente
VSCode está utilizando un motor de expresiones regulares basado en JavaScript, pero no es lo mismo. No puede usar grupos de captura con nombre allí.
Wiktor Stribiżew
1
No hay documentación específica sobre la expresión regular utilizada en VSCode. Sin embargo, si echas un vistazo al código fuente , verás un montón de código JS. Si intenta usar lookbehinds, obtendrá un error de patrón no válido, mientras que los lookaheads funcionan. Y el sabor JS regex es el único motor de expresiones regulares que trata el [^]patrón como un símbolo. Entonces, está claro que es el motor JS regex.
Wiktor Stribiżew
55
El estándar es ECMAScript 5 .
Wiktor Stribiżew
1
OKAY. Bueno, si estás seguro y tienes algunos enlaces a documentos, puedes responder. Voy a votar. Sin embargo, no piense que la especificación ECMAScript es un gran enlace si es el único.
Eric
1
Entonces, ¿qué tipo de respuesta esperas? Todo lo que publiqué arriba + enlace a la descripción de la sintaxis JS regex? ¿Te gusta la referencia MDN ?
Wiktor Stribiżew

Respuestas:

170

Rust Regex en la barra lateral Buscar / Reemplazar en archivos

Rob Lourens de MSFT escribió que la búsqueda de archivos usa Rust regex. La documentación del lenguaje Rust describe la sintaxis.

Rob Lourens en GitHub

JavaScript Regex en el widget Buscar / reemplazar en archivo

Alexandru Dima de MSFT escribió que el widget find usa JavaScript regex. Como comentó Wicktor, la documentación de ECMAScript 5 describe la sintaxis. También lo hace la Guía de expresiones regulares de JavaScript de MDN .

Alexandru Dima en GitHub

Prueba la diferencia

La barra lateral Buscar en archivos no es compatible, (?=foobar)mientras que el widget Buscar en archivo admite esa sintaxis anticipada.

Muestra una búsqueda anticipada que funciona en el widget pero no en la barra lateral.

Con respecto a Buscar / reemplazar con grupos

Para buscar / reemplazar con grupos, paréntesis uso ()para agrupar y $1, $2, $3, $npara reemplazar.

Aquí hay un ejemplo.

Antes de:

Este es el texto antes del reemplazo.

Después:

Este es el texto después del reemplazo.

Shaun Luttin
fuente
12

La respuesta de Shaun sigue siendo correcta, sin embargo, para agregar una actualización, recientemente VS Code agregó la opción de optar por usar el motor PCRE2 basado en Perl . Puede habilitar esto a través de su configuración de configuración.

Esto le permite realizar operaciones de expresiones regulares más avanzadas como lookaheads y backreferences . Pero como se indica a continuación, la expresión regular aún tiene que ser una expresión regular de JavaScript válida .

VS Code admite búsquedas de expresiones regulares, sin embargo, las referencias y la búsqueda inversa no son compatibles de forma predeterminada. Pero puede habilitarlos con la configuración search.usePCRE2 . Esto configura ripgrep para usar el motor de expresiones regulares PCRE2. Si bien PCRE2 admite muchas otras características, solo admitimos expresiones de expresión regular que aún son válidas en JavaScript , porque los editores abiertos aún se buscan utilizando la búsqueda basada en JavaScript del editor.

Y para obtener una ventaja adicional si terminó aquí tratando de hacer búsquedas en varias líneas, VS Code también agregó esa característica recientemente .

ingrese la descripción de la imagen aquí

protoEvangelion
fuente
PCRE2 se puede activar en el menú de configuración. Vaya a Preferencias ~ Configuración y busque 'regex'
DougR
Parece que esa configuración está en desuso , y PCRE2 se usa automáticamente como respaldo cuando el motor predeterminado no admite una función.
Kevin Rak