Quiero reemplazar todos los puntos -que están dentro de cadenas específicas- por guiones bajos. En mi caso, estoy usando i18n (para traducciones) dentro de mi aplicación, y las claves se llaman usando '$t(clave)'. La clave puede ser así:
key = 'translationKey' key = 'translationKey.subkey.subSubkey' key = 'translationKey.subkey.one' key = 'translationKey.subkey.zero' key = 'translationKey.subkey.others' En el contexto $t: quiero transformar los puntos (.) que no son seguidos por one o zero u others en guiones bajos (_). Si tengo esas entradas:
foo.toto.anything $t('translationKey') $t('translationKey.subkey.subSubkey') $t('translationKey.subkey.one') $t('translationKey.subkey.zero') $t('translationKey.subkey.others')Entonces la salida será:
foo.toto.anything $t('translationKey') $t('translationKey_subkey_subSubkey') $t('translationKey_subkey.one') $t('translationKey_subkey.zero') $t('translationKey_subkey.others')Me gustaría usar la búsqueda de expresiones regulares de Vscode para capturar esos puntos y reemplazarlos (si es posible).
Solo logré obtener todas las cadenas donde están los puntos de destino, pero no puedo alcanzar solo los puntos. Aquí está la expresión regular que tengo atm: (\$|\.)t?t(c|p)?('(\w+\.?)*')
Gracias
Puedes usar
(?<=\$t\('[^']*)\.(?!(?:one|zero|others)')(?=[^']*'\))Vea la demostración de expresiones regulares . Detalles :
(?<=\$t\('[^']*) - una mirada positiva hacia atrás que requiere $t(' y luego cero o más caracteres que no sean ' inmediatamente a la izquierda de la ubicación actual\. - un punto(?!(?:one|zero|others)') - una búsqueda anticipada negativa que falla la coincidencia si hay one' , zero' u others' inmediatamente a la derecha de la ubicación actual(?=[^']*'\)) - una búsqueda anticipada positiva que requiere cero o más caracteres que no sean ' y luego ') .La siguiente expresión regular debería funcionar: coincide con todos los puntos no seguidos por "uno", "otros" y "cero"
(?<=\$t\('[^']+)\.(?!one|others|zero)Puedes probarlo en línea aquí