我想将‘
,’
,“
和”
等智能引号替换为常规引号。另外,我想替换©
,®
和™
。我使用了以下代码。但它没有帮助。
请帮我解决这个问题。
str.replace(/[“”]/g, '"');
str.replace(/[‘’]/g, "'");
答案 0 :(得分:32)
使用:
str = str.replace(/[“”]/g, '"');
str = str.replace(/[‘’]/g, "'");
或在一个声明中这样做:
str = str.replace(/[“”]/g, '"').replace(/[‘’]/g,"'");
在JavaScript中(和许多其他语言一样)字符串是不可变的 - 字符串“替换”方法实际上只返回新字符串而不是修改字符串。
replace
州的MDN JavaScript reference entry:
返回一个新字符串,其中一个或所有匹配的模式由替换替换。
...
此方法不会更改调用它的String对象。它只返回一个新字符串。
答案 1 :(得分:3)
替换返回结果字符串
str = str.replace(/["']/, '');
答案 2 :(得分:1)
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()
将无法按照书面形式工作。
答案 3 :(得分:1)
要用智能引号替换所有常规引号,我使用的是类似的功能。您必须指定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值。检查here。