正则表达拼图:如何用聪明的引号替换哑巴引号

时间:2017-02-20 21:13:40

标签: javascript regex quotes

愚蠢的报价是直接出现的。智能引号卷曲,它们向正确的方向卷曲。我相信规则如下:

  • 如果引号位于单词的开头,则会向右卷曲。
  • 如果引号位于另一个引号或分组符号前面的单词的开头({[curls right。
  • 如果报价在其他任何地方,它会向左倾斜。

我需要一些脚本,它接受一个包含字符串的变量,并用正确的卷曲替换所有直引号。

This拥有各种字符代码的相关资源。

var replacedText = text.replace(/"(?=[a-zA-Z])/gi,"\u201C");
var replacedText = replacedText.replace(/'(?=[a-zA-Z])/gi,"\u2018");

例如,上述方法在语法方面起作用,我想想一个结构良好的替换系列可以起作用。但我正在努力使逻辑正确。因为我想要替换单引号和双引号,我想要智能地替换它们,以便它们在正确的方向上“打开”和“关闭”。

1 个答案:

答案 0 :(得分:2)

也许这是一个起点?我在这里做的基本上只是在第一个引号之前假设一个空格或者如果引号位于字符串的开头是“引用”消息的开头。然后我走过去,直到有一个收尾引号。再一次,只是一个开始。不确定这是否符合您提到的所有内容:

var sample = 'One guy walks into a bar and says, "Dude, whaddup?".';

sample.replace(/(\s|^)\"([^\"]+)\"/g, "$1\u201C$2\u201D")
// should return: One guy walks into a bar and says, “Dude, whaddup?”.

var sample2 = '"E=mc2" is Eistein\'s signature';

sample2.replace(/(\s|^)\"([^\"]+)\"/g, "$1\u201C$2\u201D")
// should return: “E=mc2” is Eistein's signature.

我想,为了学习,我会更详细地解释这个......

(\s|^)\"捕获任何空格或字符串的开头,然后是引号

([^\"])+捕获任何不是引用的字符(假设字符串中的引号之间都有。

\"是结束引号

然后我用捕获的中间字符串放置了智能引号,瞧!希望有所帮助!