字符串替换双引号括号括起来[重复]

问题描述 投票:6回答:4

这个问题在这里已有答案:

如何将所有Double引号替换为打开和关闭大括号。

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
4个回答
9
投票

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

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

"([^"]*)"正则表达式捕获一个",然后是0或更多不是另一个"的东西,以及一个关闭的"。替换使用$1作为引号中包含的内容的参考。


4
投票

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

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

1
投票

试试这样吧

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

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


0
投票

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

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)
© www.soinside.com 2019 - 2024. All rights reserved.