替换方法不起作用

时间:2009-09-16 14:10:03

标签: javascript

我想将等智能引号替换为常规引号。另外,我想替换©®。我使用了以下代码。但它没有帮助。 请帮我解决这个问题。

str.replace(/[“”]/g, '"');
str.replace(/[‘’]/g, "'");

4 个答案:

答案 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