Blu*_*oid 20 javascript regex quotes smart-quotes
我有一个使用基于Javascript的规则引擎的应用程序.我需要一种方法将常规直引号转换为卷曲(或智能)引号.只做一个string.replacefor 是很容易的["],只有这只会插入一个卷曲引用的情况.
我能想到的最好的方法是用左边的卷曲引号替换第一次出现的引用,用左边的代码替换每个其他的引用,其余的右边卷曲.
有没有办法使用Javascript实现这一目标?
Nic*_*ole 15
您可以使用左引号替换单词字符前面的所有内容,并使用右引号替换单词字符后面的所有内容.
str = str.replace(/"(?=\w|$)/g, "“");
str = str.replace(/(?<=\w|^)"/g, "”"); // IF the language supports look-
// behind. Otherwise, see below.
Run Code Online (Sandbox Code Playgroud)
正如下面的评论所指出的,这不会考虑标点符号,但很容易:
/(?<=[\w,.?!\)]|^)"/g
Run Code Online (Sandbox Code Playgroud)
[ 编辑:]对于不支持后视的语言,如Javascript,只要先替换所有前置的语言,就有两种选择:
str = str.replace(/"/g, "”"); // Replace the rest with right curly quotes
// or...
str = str.replace(/\b"/g, "”"); // Replace any quotes after a word
// boundary with right curly quotes
Run Code Online (Sandbox Code Playgroud)
(我已经离开了上面的原始解决方案,以防这对使用支持后视的语言的人有帮助)
您可能希望查看Pandoc的功能 - 显然可以使用该--smart选项,它可以在所有情况下正确处理引号(例如'tis和'twere).
我最近写了一个Javascript排版预处理引擎,除其他外,还引用了引用替换; 我基本上使用了Renesis建议的算法,但目前还有一个失败的测试等待更智能的解决方案.
如果你有兴趣抄袭我的代码(和/或根据你已完成的工作提交补丁),请查看:jsPrettify.jsprettify.prettifyStr做你想要的.如果你不想处理Closure依赖,那么它就有一个自己运行的旧版本 - 它甚至可以在Rhino中运行.