【问题标题】:String replace Double quotes into curly brackets [duplicate]字符串将双引号替换为大括号[重复]
【发布时间】:2019-05-22 22:12:45
【问题描述】:

如何将所有双引号替换为左大括号和右大括号。

let str = "This" is my "new" key "string";

我试过这个正则表达式

str.replace(/"/,'{').replace(/"/,'}')

但我最终得到了这个:

{This} is my "new" key "string"

这里只有第一个词在改变,但我想改变所有的词。 我希望结果是:

{This} is my {new} key {string}

提前致谢。

【问题讨论】:

标签: javascript regex string replace ecmascript-6


【解决方案1】:

一种非常简单的方法是将字符串作为数组进行迭代,每次遇到字符 " 时将其替换为 {} 重复。

let str = '"This" is my "new" key "string"';
let strArray = str.split("");
let open = true;
for (let i = 0; i < strArray.length; ++i) {
    if (strArray[i] == '"') {
        if (open === true) {
            strArray[i] = '{';
        }
        else {
           strArray[i] = '}';
        }
        open = (open == true) ? false : true;
    }
}
str = strArray.join("");
console.log(str)

【讨论】:

    【解决方案2】:

    尝试使用全局正则表达式并使用捕获组:

    let str = '"This" is my "new" key "string"';
    str = str.replace(/"([^"]*)"/g, '{$1}');
    console.log(str);

    "([^"]*)" 正则表达式捕获 ",后跟 0 个或多个不是另一个 " 的事物,以及结束 "。替换使用$1 作为引号中的内容的参考。

    【讨论】:

      【解决方案3】:

      这样试试

      str.replace(/\"(.*?)\"/g, "{$1}")
      

      我们需要使用g-gobal flag。这里捕获双引号“”之间的字符串,然后用匹配的字符串花括号替换

      【讨论】:

        【解决方案4】:

        您的代码目前仅适用于每个{} 的第一次出现。解决此问题的最简单方法是在str 中仍有" 时循环:

        let str = '"This" is my "new" key "string"';
        while (str.includes('"')) {
          str = str.replace(/"/,'{').replace(/"/,'}');
        }
        console.log(str);

        【讨论】: