Javascript заменяет открывающие и закрывающие скобки

у меня есть строка текста, например

[text1] [text2] [text3]

Я хочу заменить символ " ["символом" $ {"и"] "символом"}", но только в том случае, когда за " ["следует"]".

[text1] [[text2] [text3]

в результате

${text1} [${text2} ${text3}

как я могу это сделать с помощью regex в Javascript?

Я написал что-то вроде этого

someString = someString.replace(/[/g, "${");
someString = someString.replace(/]/g, "}");

но это не работает для моей проблемы, он просто заменяет каждый скоба.

1 ответов


вы можете использовать

var s = "[text1] [[text2] [text3]";
console.log(s.replace(/\[([^\][]+)]/g, "$${}"));

подробности

  • \[ - a [ char
  • ([^\][]+) - Группа 1: a отрицается класс символов соответствие любому 1 + chrs, кроме [ и ] (обратите внимание, что внутри класса символов в регулярном выражении JS ] char всегда должен быть экранирован, даже если он помещен в отрицаемый класс start)
  • ] - a ] char (снаружи класса символов, ] не является особенным и не должен быть экранирован).

в шаблоне замены, $$ означает буквальный $ чар { добавляет { чар вставляет значение группы 1, а затем это.