Quiero verificar la cadena y, si hay una comilla doble, primero verifique si el carácter anterior no es una barra invertida, luego reemplácelo con \" . Utilicé el enfoque a continuación, pero no sabía cómo verificar el carácter anterior mediante expresiones regulares.
str = 'field_id + "content" '; result = str.replace(/\"/g, '\\"'); // result : 'field_id + \"content\"' str_2 = 'field_id + \"content\" '; result_2 = str_2.replace(/\"/g, '\\"'); // result_2 : 'field_id + \\"content\\" ' // desired result => 'field_id + \"content\" 'Un enfoque sería hacer un reemplazo de expresiones regulares en todos los términos citados, y luego construir la salida usando comillas dobles con barra invertida escapada.
var str = 'field_id + "content" '; var output = str.replace(/"(.*?)"/g, '\\"$1\\"'); console.log(output);En su expresión regular, escapa del " ( \" ). Eso no es necesario.
Sin él, obtienes el resultado deseado:
const doubleApoStrophRE = /"/g; let str = 'field_id + "content" '; let str2 = 'field_id + \"content\" '; console.log(str.replace(doubleApoStrophRE, '\\"')); console.log(str2.replace(doubleApoStrophRE, '\\"')); // for str3 you need a bit more complexity let str3 = `field_id + \\\\\\"content\\\\\\"'`; console.log(str3.replace(/(\\{2,})?"/g, '\\"'));Verifique regex101 para probar expresiones regulares