Quiero reemplazar todas las comillas dobles rectas con comillas dobles rizadas:
const text = `"This has an opening and a closing quote." "This only has an opening quotes This doesn't have quotes.` const result = text.replace(/"([^"\n\r]*)"?/g, '“$1”') console.log(result) El problema con mi .replace actual es que está agregando comillas dobles cuando no hay comillas dobles rectas de cierre:
“Esto tiene una cita de apertura y una de cierre”.
“Esto solo tiene comillas de apertura”
Esto no tiene comillas.
¿Cómo cambiar mi función .replace para que no agregue comillas de cierre dobles cuando no hay comillas de cierre dobles rectas?
Rendimiento esperado:
“Esto tiene una cita de apertura y una de cierre”.
“Esto solo tiene comillas de apertura
Esto no tiene comillas.
Utilice Unicode en lugar de las entidades HTML. Al igual que:
const text = `"This has an opening and a closing quote." "This only has an opening quotes This doesn't have quotes.` const result = text.replace(/"([^"\n\r]*)"?/g, '\u201d$1\u201c') console.log(result) Donde \u201d son las comillas rizadas de apertura y \u201c son las comillas rizadas de cierre.
Puede usar este código con 2 llamadas al método .replace :
.replace , solo hacemos coincidir el simple " y lo reemplazamos con comillas dobles a la izquierda (entidades html). Esto supone que los simples " después del reemplazo del par cotizado son los de apertura.
Código:
const text = `"This has an opening and a closing quote." "This only has an opening quotes This doesn't have quotes.`; const result = text.replace(/"([^"\n\r]*)"/g, '“$1”').replace(/"/g, '“'); console.log(result)