将字符串中的双引号替换为花括号

7
如何将所有双引号替换为开括号和闭括号。
let str = "This" is my "new" key "string";

我尝试使用以下正则表达式

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

但是最终我得到了这个结果:
{This} is my "new" key "string"

这里我只得到了第一个单词被更改,但我想要更改所有的单词。 我希望结果是:

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

感谢您的提前帮助。

1
我有点同意投票重新开放这个问题的人。虽然关于智能引号的问题非常相似,但是想要寻找一种简单的方法来替换对称分隔符以形成平衡对的人需要向下滚动很远才能找到唯一一个不假设输入为英语散文文本的答案 - Ilmari Karonen
4个回答

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

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-global标志。在这里,捕获双引号 "" 之间的字符串,然后用匹配的字符串花括号替换。

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)


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