El siguiente código reemplaza las comillas dobles rectas con comillas dobles rizadas:
const input = `"Line 1" "Line 2 "Line 3" Line 4` const output = input.replace(/\"(.*?)(\")/g, '“$1”') console.log(output)Sin embargo, hay un problema. A veces, una línea no tiene una comilla doble de cierre (lo que indica que las comillas continúan en la línea de abajo). Entonces la comilla doble de apertura no será reemplazada:
`“Line 1$1” "Line 2 “Line 3$1” Line 4`¿Cómo modificar la expresión regular para que también reemplace las comillas dobles de apertura que no son seguidas por una comilla doble de cierre?
Salida deseada:
`“Line 1$1” “Line 2 “Line 3$1” Line 4`Iría en 2 replace() sucesivos, si está bien:
"...'""... const output = input .replace(/\"(.*?)(\")/g, '“$1”') .replace(/\"(.*)/g, '“$1”')Pero no entendí si quería hacer coincidir los resultados de varias líneas en una cadena final única, o simplemente agregar comillas al final de cada línea
const input = `"Line 1" "Line 2 "Line 3" Line 4` const output = input.replace(/"([^"/]*)"/g, '“$1”') console.log(output)Puedes usar
.replace(/^"([^"\n\r]*)"?$/gm, "“$1”") Vea la demostración de expresiones regulares . La expresión regular coincide con todas las ocurrencias que no se superponen ( g ), mientras que el inicio de las líneas coincide con ^ y el final de las líneas con $ (debido a m ) y significa
^ - comienzo de una línea" - una comilla doble([^"\n\r]*) - Grupo 1: cualquier cero o más caracteres que no sean " , CR y LF"? - un carácter opcional "$ - final de cualquier línea.Vea la demostración de JavaScript:
const input = `"Line 1" "Line 2 "Line 3" Line 4` const output = input.replace(/^"([^"\n\r]*)"?$/gm, '“$1”') console.log(output)