strings escape define javascript regex quotes smart-quotes

javascript - escape - Convertir "cotizaciones rectas" en "cotizaciones rizadas"



javascript strings (7)

Es posible que desee ver lo que hace Pandoc : al parecer, con la opción --smart , maneja las citas correctamente en todos los casos (incluidos, por ejemplo, ''tis y'' twere).

Hace poco escribí un motor de simulación de tipografía de Javascript que, entre otras cosas, sustituye las citas; Terminé usando básicamente el algoritmo sugerido por Renesis , pero actualmente hay una prueba fallida esperando una solución más inteligente.

Si está interesado en codificar mi código (y / o enviar un parche basado en el trabajo que ha realizado), revíselo: jsPrettify . jsprettify.prettifyStr hace lo que estás buscando. Si no desea lidiar con la dependencia de cierre, hay una versión anterior que se ejecuta por sí sola, incluso funciona en Rhino.

Tengo una aplicación que utiliza un motor de reglas basado en Javascript. Necesito una forma de convertir comillas rectas regulares en citas rizadas (o inteligentes). Sería fácil simplemente hacer un string.replace para ["] , solo que esto solo insertará un caso de la cita.

La mejor manera en la que podía pensar era reemplazar la primera aparición de una cita con una cita a la izquierda y todas las demás seguidas por una a la izquierda, y el resto a la derecha.

¿Hay alguna manera de lograr esto usando Javascript?


Lo siguiente simplemente cambia cada cita alternando (este ejemplo específico, sin embargo, dejaría las citas huérfanas).

str.replace(//"([^/"]*)/"/gi,"“$1”");

Funciona a la perfección, siempre y cuando el texto que estás texturizando no se haya estropeado con el uso incorrecto de la comilla doble. En inglés, las citas nunca se anidan.


No creo que algo como eso en general sea ​​fácil, porque tendrías que interpretar exactamente lo que significa cada comilla doble en tu contenido. Dicho esto, lo que haría sería recopilar todos los nodos de texto en los que estaba interesado, y luego revisar y hacer un seguimiento de la naturaleza "encendido / apagado" (o "impar / par"; lo que sea) de cada instancia de doble cita. Entonces podrás saber qué entidad de reemplazo utilizar.


No encontré la lógica que quería aquí, así que esto es con lo que terminé yendo.

value = value.replace(/(^|/s)(")/g, "$1“"); // replace quotes that start a line or follow spaces value = value.replace(/"/g, "”"); // replace rest of quotes with the back smart quote

Tengo un área de texto pequeña que necesito para reemplazar las comillas rectas con comillas (inteligentes). Solo estoy ejecutando esta lógica en keyup. Traté de hacer que se comportara como Microsoft Word.


Podría reemplazar todo lo que precede a un carácter de palabra con la cita de la izquierda, y todo lo que sigue a un carácter de palabra con una cita de la derecha.

str = str.replace(/"(?=/w|$)/g, "&#8220;"); str = str.replace(/(?<=/w|^)"/g, "&#8221;"); // IF the language supports look- // behind. Otherwise, see below.

Como se señala en los comentarios a continuación, esto no tiene en cuenta la puntuación, pero puede fácilmente:

/(?<=[/w,.?!/)]|^)"/g

[ Editar :] Para los idiomas que no admiten la función de búsqueda retrospectiva, como Javascript, siempre que reemplace primero los que están al frente, tiene dos opciones:

str = str.replace(/"/g, "&#8221;"); // Replace the rest with right curly quotes // or... str = str.replace(//b"/g, "&#8221;"); // Replace any quotes after a word // boundary with right curly quotes

(He dejado la solución original arriba en caso de que esto sea útil para alguien que usa un lenguaje que sí es compatible)


Publicación para la posteridad.

Según lo sugerido por @Steven Dee, fui a Pandoc .

Intento usar una herramienta madura y probada siempre que puedo, en lugar de hornear mi propia expresión regular. Los regex construidos a mano pueden ser demasiado codiciosos, o no lo suficientemente codiciosos, y pueden no ser sensibles a los límites de palabras y comas, etc. Pandoc explica la mayoría de esto y más.

Desde la línea de comando (el parámetro --smart activa comillas inteligentes):

pandoc --smart --standalone -o output.html input.html

..y sé que una secuencia de comandos de línea de comandos puede o no ajustarse al requisito de OP de usar Javascript . (relacionado: Cómo ejecutar comando shell en Javascript )


''foo "foo bar" "bar"''.replace(/"([-a-zA-Z0-9 ]+)"/g, function(wholeMatch, m1){ return "“" + m1 + "”"; });