我想更换智能引号类似‘
,’
,“
和”
正规的报价。另外,我想替换©
,®
和™
。我使用了以下代码。但它没有帮助。请帮我解决这个问题。
str.replace(/[“”]/g, '"');
str.replace(/[‘’]/g, "'");
我想更换智能引号类似‘
,’
,“
和”
正规的报价。另外,我想替换©
,®
和™
。我使用了以下代码。但它没有帮助。请帮我解决这个问题。
str.replace(/[“”]/g, '"');
str.replace(/[‘’]/g, "'");
用:
str = str.replace(/[“”]/g, '"');
str = str.replace(/[‘’]/g, "'");
或者用一个语句来做:
str = str.replace(/[“”]/g, '"').replace(/[‘’]/g,"'");
在 JavaScript 中(就像在许多其他语言中一样)字符串是不可变的 - 字符串“替换”方法实际上只是返回新字符串而不是修改字符串。
该MDN JavaScript的参考项的replace
规定:
返回一个新字符串,其中部分或全部匹配的模式被替换。
…
此方法不会更改调用它的 String 对象。它只是返回一个新字符串。
替换返回结果字符串
str = str.replace(/["']/, '');
OP 没有说明为什么它不起作用,但似乎存在与文件编码相关的问题。如果我有一个 ANSI 编码的文件并且我这样做:
var s = "“This is a test” ‘Another test’";
s = s.replace(/[“”]/g, '"').replace(/[‘’]/g,"'");
document.writeln(s);
我得到:
"This is a test" "Another test"
我将编码转换为 UTF-8,修复了智能引号(在我更改编码时损坏),然后转换回 ANSI,问题就消失了。
请注意,当我将此页面上的双引号和单引号复制并粘贴到我的测试文档(ANSI 编码)中并运行此代码时:
var s = "“This is a test” ‘Another test’";
for (var i = 0; i < s.length; i++) {
document.writeln(s.charAt(i) + '=' + s.charCodeAt(i));
}
我发现所有智能引号都显示为? = 63
.
因此,对于 OP,请确定智能引号的来源,并确保它们是您期望的字符代码。如果不是,可以考虑改变源的编码,使他们为到达“ = 8220
,” = 8221
,‘ = 8216
和’ = 8217
。使用我的循环来检查源,如果智能引号显示的charCodeAt()
值不是我列出的值,replace()
则不会按书面方式工作。
为了用智能引号替换所有常规引号,我使用了类似的函数。您必须指定 CharCode,因为某些不同的计算机/浏览器默认设置可能会以不同方式识别纯字符(“”、“、”、“)。
使用 CharCode 调用 ASCII 字符,这将消除跨不同浏览器和操作系统的错误空间。这也有助于双语使用(口音等)。
用单引号替换智能引号
function unSmartQuotify(n){
var name = n;
var apos = String.fromCharCode(39);
while (n.indexOf("'") > -1)
name = name.replace("'" , apos);
return name;
}
要查找您可能需要的其他 ASCII 值。检查这里。