如何在JavaScript中用双引号替换单引号?

56
以下代码仅替换一个单引号:

var a = "[{'column1':'value0','column2':'value1','column3':'value2'}]";
var b = a.replace("'", "\"");
console.log(b);


https://dev59.com/nXE95IYBdhLWcg3wPrkI - valverij
7个回答

128

var a = "[{'column1':'value0','column2':'value1','column3':'value2'}]";
var b = a.replace(/'/g, '"');
console.log(b);

编辑:由于此处无用,已删除反斜杠。


3
太棒了,它起作用了,尽管我不明白那个“g”的意思是什么。 - coder
2
这是一个正则表达式标志。点击此处了解更多相关内容 - qJake
4
“g”标志表示你正在执行全局搜索。 - RafH
No need for the \ escapes. - Ted Hopp
是的,对于正则表达式来说 "" 是可以理解的(虽然不是必需的),但对于第二个参数字符串来说就不是了。 - Ian
注意,使用 \ 将有助于保持语法高亮不被破坏。 - bearfriend

8

需要使用正则表达式解决此问题:

var a = "[{'column1':'value0','column2':'value1','column3':'value2'}]";
var b = a.replace(/\'/g, "\"");

http://jsfiddle.net/9b3K3/


5
您可以在正则表达式上使用全局限定符(即尾随的g):
var b = a.replace(/'/g, '"');

没有全局修饰符,正则表达式 (/'/) 只匹配第一个 ' 实例。

5

replaceAll(search, replaceWith)会用replaceWith替换所有的search

然后,确保你有一个字符串,将一种引号用另一种引号包裹:

 "a 'b' c".replaceAll("'", '"')
 // result: "a "b" c"
    
 "a 'b' c".replaceAll(`'`, `"`)
 // result: "a "b" c"

更多关于replaceAll

replaceAll (MDN): replaceAll(search, replaceWith)

实际上,它与使用全局正则表达式的replace()相同,只是在我看来,replaceAll()更易读。

(*) 意味着它将匹配所有出现的实例。


示例1 - 使用字符串进行搜索

const p = 'Please replace all 2020 occurrences with 2021. 2020. 2020.' 
   
console.log(p.replaceAll('2020', '2021'));
// Result: "Please replace all 2021 occurrences with 2021. 2021. 2021."

例子2 - 使用正则表达式进行搜索

const p = 'Please replace all 2020 occurrences with 2021. 2020. 2020.'    
const regex = /2020/gi


console.log(p.replaceAll(regex, '2021'));
// Result: "Please replace all 2021 occurrences with 2021. 2021. 2021."

如果你选择正则表达式,重要提示():

当使用正则表达式(regexp)时,必须设置全局标志("g"); 否则,它将抛出一个类型错误(TypeError):"replaceAll必须使用全局RegExp调用"。


你也可以使用函数作为replaceWith

在这种情况下,在匹配完成后将调用该函数。 函数的结果(返回值)将用作替换字符串。


3

这看起来非常像有问题的JSON,所以我建议使用实际的数组和对象文字,然后以正确的方式进行编码:

var a = [{'column1':'value0','column2':'value1','column3':'value2'}];
var b = JSON.stringify(a);

我已经尝试过这样做,但是它比替换字符串所需的时间更长。 - coder
我本可以一开始就以正确的格式创建JSON字符串,但是我在将其(作为会话)存储在隐藏字段中时遇到了问题。我将所有双引号替换为单引号,以便它可以存储在隐藏字段中。然后在客户端上,我将其替换回双引号。如果有更好的解决方案,我将不胜感激。 - coder

0
添加 g 修饰符: var b = a.replace(/'/g, '"');

0
您可以使用带有全局标志的RegExp,所有引号都将被替换:
var b = a.replace(/'/g, '"');

你不能“只是添加全局标志g”。你需要创建一个正则表达式并设置全局标志。顺便说一下,这会用错误的字符替换错误的字符。 - Ian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接