替换方法不起作用

IT技术 javascript
2021-01-31 21:12:02

我想更换智能引号类似正规的报价。另外,我想替换©,®我使用了以下代码。但它没有帮助。请帮我解决这个问题。

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

用:

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

或者用一个语句来做:

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

在 JavaScript 中(就像在许多其他语言中一样)字符串是不可变的 - 字符串“替换”方法实际上只是返回新字符串而不是修改字符串。

MDN JavaScript的参考项replace规定:

返回一个新字符串,其中部分或全部匹配的模式被替换。

此方法不会更改调用它的 String 对象。它只是返回一个新字符串。

这是我的代码示例。itemObject.setValue(itemObject.getValue().replace(/[“”]/g, '"').replace(/['']/g,"'"));
2021-03-12 21:12:02
它是否适用于其他角色?例如,尝试用 Z 替换 X 和 x。
2021-03-16 21:12:02
Babu,我刚刚测试了 Jon 的代码。它工作正常。你可以再详细一点吗?新代码示例?
2021-03-20 21:12:02
乔恩,我仍然有同样的问题。
2021-04-05 21:12:02

替换返回结果字符串

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 值。检查这里