0

有谁知道如何将下面的这 2 个符号从字符串替换为代码?

  • ' 左单引号变成 '
  • ' 右单引号变成 '
  • " 左双引号变成 "
  • "右双引号变成"
4

3 回答 3

1

困难的部分是识别撇号,这会弄乱单引号的数量。

对于双引号,我认为找到它们并用左卷曲替换奇数引号和用右卷曲替换偶数引号是安全的。除非您有嵌套引号的情况。

来源是什么?英文文本?代码?

于 2009-06-10T01:53:07.770 回答
1

如果您希望它是万无一失的,那么知道引用哪种方式(左或右)并不容易。如果始终让它完全正确不是那么重要,您可以使用几个正则表达式:

function curlyQuotes(inp) {
    return inp.replace(/(\b)'/, "$1’")
              .replace(/'(\b)/, "‘$1")
              .replace(/(\b)"/, "$1”")
              .replace(/"(\b)/, "“$1")
}

curlyQuotes("'He said that he was \"busy\"', said O'reilly")
// ‘He said that he was “busy”', said O’reilly

您会看到第二个 ' 没有正确更改。

于 2009-06-10T01:54:47.643 回答
0

我最近编写了一个名为jsPrettify的排版美化引擎,它就是这样做的。这是我使用的算法的仅引号版本(此处为原始版本):

prettifyStr = function(text) {
  var e = {
    lsquo:  '\u2018',
    rsquo:  '\u2019',
    ldquo:  '\u201c',
    rdquo:  '\u201d',
  };
  var subs = [
    {pattern: "(^|[\\s\"])'",      replace: '$1' + e.lsquo},
    {pattern: '(^|[\\s-])"',       replace: '$1' + e.ldquo},
    {pattern: "'($|[\\s\"])?",     replace: e.rsquo + '$1'},
    {pattern: '"($|[\\s.,;:?!])',  replace: e.rdquo + '$1'}
  ];
  for (var i = 0; i < subs.length; i++) {
    var sub = subs[i];
    var pattern = new RegExp(sub.pattern, 'g');
    text = text.replace(pattern, sub.replace);
  };
  return text;
};
于 2010-03-25T04:49:55.803 回答