【问题标题】: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);