Propongo el siguiente RegEx:
delve\(\s*([^,]+?)\s*,\s*['"]([^.]+?)['"]\s*\)
y la siguiente cadena de formato de reemplazo:
$1?.$2
Explicación: Match delve( , un primer argumento hasta la primera coma (coincidencia perezosa), y luego un segundo argumento de cadena (no se tiene cuidado de asegurar que los corchetes coincidan ya que esto es bastante rápido y sucio de todos modos), luego el corchete de cierre de la convocatoria ) . Se tiene en cuenta el espacio en lugares razonables.
que funcionará para casos simples como delve(someVar, "key" ) pero podría fallar en casos patológicos; Siempre revise los reemplazos manualmente.
Tenga en cuenta que esto se hace explícitamente incapaz de tratar con delve(var, "abc" ) porque, hasta donde yo sé, las cadenas de formato VSC no admiten "unir" números variables de capturas por una cadena determinada. Como solución temporal, podría crear explícitamente versiones con dos, tres, cuatro, cinco... puntos y escribir los reemplazos correspondientes. La versión para dos puntos, por ejemplo, se ve así:
delve\(([^,]+?)\s*,\s*['"]([^.]+?)\.([^.]+?)['"]\s*\)
y la cadena de formato es $1?.$2?.$3 .
Usted escribe:
p.ej
delve(seo,'meta')
delve(item, "image.data.attributes.alternativeText")
resultado deseado
seo?.meta
item?.image.data.attributes.alternativeText
pero dudo mucho que esto sea intencionado, porque delve(item, "image.data.attributes.alternativeText") es de hecho equivalente a item?.image?.data?.attributes?.alternativeText en lugar del resultado deseado que describe. Para que lo maneje de esa manera, simplemente reemplace [^.] con . para que acepte cadenas que contengan cualquier carácter (incluidos los puntos).