有谁知道如何将下面的2个符号从字符串替换为代码?
答案 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;
};