El siguiente código reemplaza las comillas dobles rectas de apertura y cierre por comillas dobles curvas de apertura y cierre:
const string = `Not dialogue not dialogue. "Dialogue dialogue. "Dialogue dialogue." "Dialogue," not dialogue. "Dialogue."` const result = string.replace(/"([^"\n\r]*)"/g, '“$1”') console.log(result) ¿Cómo modificar este código para que la comilla doble recta de apertura en "Dialogue dialogue (segunda línea) también se reemplace por una comilla doble rizada de apertura (sin agregar una comilla doble rizada de cierre al final de la línea)?
Salida deseada:
Not dialogue not dialogue. “Dialogue dialogue. “Dialogue dialogue.” “Dialogue,” not dialogue. “Dialogue.”Puedes usar
const string = `Not dialogue not dialogue. "Dialogue dialogue. "Dialogue dialogue." "Dialogue," not dialogue. "Dialogue."` const result = string.replace(/"([^"\n\r]*)("|$)/gm, (x,y,z) => z == '"' ? `“${y}”` : `“${y}`) console.log(result)Detalles :
" - una comilla doble([^"\n\r]*) - Grupo 1: cualquier cero o más caracteres que no sean " , CR y LF("|$) - Grupo 2: " o final de línea ( m hace que $ coincida con el final de cualquier línea). El reemplazo (x,y,z) => z == '"' ? `“${y}”` : `“${y}` reemplaza con “ + valor del Grupo 1 + ” si el Grupo 2 el valor es " , de lo contrario, el reemplazo es “ + Valor del grupo 1.