2009-06-10 121 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; 
};