2009-06-10 64 views
0

有谁知道如何将字符串中的这2个符号替换为代码?在javascript中替换符号

  • '左单引号为‘
  • ' 右单引号为’
  • “左双引号为“
  • ” 右双引号为”
+0

您是不是指那些需要在自己的产品线上的每个产品? – Nosredna 2009-06-10 01:41:06

回答

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 

你会看到第二个“不正常变化。

1

的困难的部分是识别撇号,这将混淆单引号的数量。

对于双引号,我认为可以安全地找到它们,用左曲线替换奇数曲线,用右曲线替换偶数曲线。除非你有嵌套报价的情况。

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

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; 
};