【问题标题】:How do I replace single quotes with double quotes in JavaScript?如何在 JavaScript 中用双引号替换单引号?
【发布时间】:2013-05-03 05:58:03
【问题描述】:

以下代码只替换了一个单引号:

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

【问题讨论】:

标签: javascript


【解决方案1】:

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

编辑:删除 \ 因为这里没有用。

【讨论】:

  • 太棒了,它可以工作,虽然我不明白那个 'g' 是干什么用的。
  • 这是一个正则表达式标志。 Read all about them.
  • "g" 标志表示您执行全局搜索
  • 不需要 \ 转义。
  • 是的,“\”对于正则表达式是可以理解的(虽然不需要),但对于第二个参数字符串则不是
【解决方案2】:

需要为此使用正则表达式:

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

http://jsfiddle.net/9b3K3/

【讨论】:

    【解决方案3】:

    您可以在正则表达式上使用全局限定符(尾随 g):

    var b = a.replace(/'/g, '"');
    

    没有全局限定符,正则表达式 (/'/) 仅匹配 ' 的第一个实例。

    【讨论】:

      【解决方案4】:

      replaceAll(search, replaceWith) 将所有出现的search 替换为replaceWith

      然后,通过用不同类型包装一种类型的 qoutes 来确保你有一个字符串:

       "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 must be called with 一个全局正则表达式”。


      您也可以将函数用作replaceWith

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

      【讨论】:

        【解决方案5】:

        这看起来有点像错误的 JSON,所以我建议使用实际的数组和对象字面量,然后以正确的方式编码:

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

        【讨论】:

        • 我这样做了,但它比替换字符串花费的时间太长。
        • 我本可以首先以正确的格式创建 JSON 字符串,但是我无法将它(作为会话)存储在隐藏字段中。我将所有双引号替换为单引号,以便将其存储在隐藏字段中。然后在客户端我将它替换回双引号。如果有更好的解决方案,我将不胜感激
        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

          您可以使用带有全局标志g 的正则表达式,所有引号都将被替换:

          var b = a.replace(/'/g, '"');
          

          【讨论】:

          • 您不会“只添加全局标志 g”。您创建了一个正则表达式并设置了全局标志。顺便说一下,用错误的字符替换错误的字符
          猜你喜欢
          • 2011-01-26
          • 2021-08-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多