在javascript中替换符号

时间:2009-06-10 01:36:21

标签: javascript quotes quotation-marks

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

  • '将单引号留入'
  • '将单引号标记为'
  • “左双引号进入”
  • “右双引号进入”

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分: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 :(得分:0)

我最近写了一个名为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;
};