String replace Double quotes into curly brackets

Viewed 3092

How to replace all the Double quotes into both open and close curly brackets.

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

I tried with this regex

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

But I end up with this:

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

Here am getting only the first word is changing but i would like to change all the words. I want the result to be:

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

Thanks in advance.

4 Answers

Try using a global regex and use capture groups:

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

The "([^"]*)" regex captures a ", followed by 0 or more things that aren't another ", and a closing ". The replacement uses $1 as a reference for the things that were wrapped in quotes.

Your code currently is only working for the first occurrence of each { and }. The easiest way to fix this would be to loop while there is still a " in str:

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

Try like this

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

we need to use g-gobal flag. Here capturing string between double quotes "", then replace with matched string curly braces

A very simple way to do that is to iterate over string as an array and every time it encounters character " replace it either by { or by } repeatedly.

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)

Related