Убрать всё, что между парами квадратных скобок

Есть строка вида "abc[a]NEED TO REMOVE THIS[a]some text[b]AND THIS[b]". Необходимо убрать всё, что заключено между парами квадратных скобок. Знаю, что решением является что-то на подобии этого: myString.replaceAll(RegExp('[*]*[*]', ''), но не знаю как правильно сделать регулярку.


Ответы (1 шт):

Автор решения: Wiktor Stribiżew

Если нужно удалить всё вместе с тегами, вы можете использовать String#replaceAll

String result = text.replaceAll(RegExp(r'\[(\w+)][^]*?\[\1]'), '');

См. пример работы выражения. Подробности:

  • \[ - символ [
  • (\w+) - Подмаска №1: одна и более букв, цифр или _
  • ] - символ ]
  • [^]*? - ноль и более любых символов, но как можно меньше
  • \[\1] - [, затем то же значение, что и в подмаске №1, а потом ].

Если нужно удалить текст внутри тегов, но сами теги оставить, вы можете использовать String#replaceAllMapped:

final regex = RegExp(r'(\[(\w+)])[^]*?(\[\2])');
String text = "abc[a]NEED TO REMOVE THIS[a]some text[b]AND THIS[b]";
final result = text.replaceAllMapped(regex, (Match m) => "${m[1]}${m[3]}");
print(result); // => abc[a][a]some text[b][b]
→ Ссылка