【问题标题】:replace symbol in javascript在javascript中替换符号
【发布时间】:2009-06-10 01:36:20
【问题描述】:

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

  • '左单引号变成'
  • '右单引号变成'
  • " 左双引号变成“
  • “右双引号变成”

【问题讨论】:

  • 你的意思是每个人都在自己的线上吗?
  • 他想用“卷曲”的引号替换普通引号。
  • 好的。我将重新格式化以便更容易理解。
  • StackOverflow 是否会替换已发布代码的智能引号?是否必须使用 HTML 实体才能使它们工作?

标签: javascript quotes quotation-marks


【解决方案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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      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-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-22
        • 2012-10-01
        • 2021-08-02
        • 2018-12-26
        • 2011-12-07
        相关资源
        最近更新 更多