¿La expresión regular de VSCode encuentra y reemplaza las matemáticas de subcoincidencia?

205
%s@{fileID: \(213[0-9]*\)@\='{fileID: '.(submatch(1)-1900)@

Estoy usando este comando de búsqueda y reemplazo de expresiones regulares en vim para restar una constante de cada identificación coincidente.

Puedo encontrar la expresión regular en VSCode, pero ¿cómo puedo hacer referencia submatcha matemáticas y reemplazar? submatch(1)no funciona en VSCode?

Gracias.

Rakka Rage
fuente

Respuestas:

345

Dada una expresión regular de (foobar)usted, puede hacer referencia al primer grupo usando $1y así sucesivamente si tiene más grupos en el campo de entrada de reemplazo.

Benjamin Pasero
fuente
preguntó nuevamente aquí: stackoverflow.com/questions/35283300/…
Rakka Rage
44
Tenía que reemplazar <p>(.*)</p>con <p>\n\t\t\t\t\t\t$1\n\t\t\t\t\t</p>un archivo de línea 2000. Imagina que lo hago manualmente.
Bishwas Mishra
100

Para aumentar la respuesta de Benjamin con un ejemplo:

Find        Carrots(With)Dip(Are)Yummy
Replace     Bananas$1Mustard$2Gross
Result      BananasWithMustardAreGross

Cualquier cosa entre paréntesis puede ser una expresión regular.

Shaun Luttin
fuente
Este me recordó que debería escapar del paréntesis si estoy haciendo una expresión regular en la declaración if.
Mecánico
65

Solo para agregar otro ejemplo:

Estaba reemplazando src attr en las etiquetas img html, pero necesitaba reemplazar solo el src y mantener cualquier texto entre la declaración img y el atributo src.

Usé la herramienta buscar + reemplazar (ctrl + h) como en la imagen: Encontrar y reemplazar

Diogo Paschoal
fuente
8
para mí esto funciona de manera inconsistente, aunque la selección se bifurca correctamente, la salida a veces se mantiene $1sin reemplazo
godblessstrawberry
1
Hola, @godblessstrawberry, ¿puedes compartir tus cadenas de búsqueda y reemplazo?
Diogo Paschoal
2
hola @Diogo yo estaba tratando de reemplazar projectwide \[innerHtml\]\s*=\s*"'(.*)'\s*\|\s*translate\s*"con myTranslate="$1"y estaba saltando teclas al azar y la inserción de $ 1 en lugar del valor del grupo a veces. actualización a 1.28.0 resolvió este problema
godblessstrawberry
Me encontré con el mismo problema que @godblessstrawberry, haciendo un reemplazo global en todos mis archivos con la expresión regular '(y | o \ + | \ -) ​​\ n (*)' y la cadena de reemplazo '\ n $ 2 $ 1' a veces correctamente desplazó el operador binario al inicio de la nueva línea pero en otros casos simplemente insertó $ 2 $ 1. Parece ser un error en VSCodium
Tom Close
@godblessstrawberry, mira esto: github.com/microsoft/vscode/issues/81825 . Si no se aplica a usted, proporcione más información y abra un problema allí.
Diogo Paschoal
9

En mi caso, $ 1 no funcionaba, pero $ 0 funciona bien para mi propósito.

En este caso, estaba tratando de reemplazar cadenas con el formato correcto para traducirlas en Laravel, ¡espero que esto pueda ser útil para otra persona porque me tomó un tiempo resolverlo!

Search: (?<=<div>).*?(?=</div>)
Replace: {{ __('$0') }}

Regex Reemplazar cadena para traducción Laravel

Ares9323
fuente
1
¿Es posible que copie su edición de su publicación y copie el código en lugar de la imagen? Sería mejor para la visualización.
Pankwood
3

Para los principiantes, la respuesta aceptada es correcta, pero un poco breve si no está familiarizado con VSC o Regex.

Entonces, en caso de que este sea su primer contacto con:

Para buscar y modificar texto,

  1. En el paso "Buscar", puede usar expresiones regulares con "capturar grupos" I want to find (group1) and (group2), por ejemplo , usar paréntesis. Esto encontraría el mismo texto que I want to find group1 and group2, pero con la diferencia que luego puede hacer referencia group1y group2en el siguiente paso:

  2. En el paso "Reemplazar", puede referirse a los grupos de captura a través de $1, $2etc., para que pueda cambiar la oración a I found $1 and $2 having a picnic, lo que generaríaI found group1 and group2 having a picnic.

Notas:

  • En lugar de solo una cadena, cualquier cosa dentro o fuera de ella ()puede ser una expresión regular.

  • $0 se refiere a todo el partido

Tedskovsky
fuente
2

Otro ejemplo simple:

Search: style="(.+?)"
Replace: css={css`$1`}

¡Útil para convertir HTML a JSX con emoción / css!

Hedley Smith
fuente