Невозможно с помощью регулярного выражения ICU (библиотеки регулярных выражений, используемого в Swift) сопоставить фрагмент текста, который не равен какой-либо строке из нескольких символов. Вы можете сделать это, если хотите найти 1 или более символов, отличных от определенного символа. Вы не можете сделать это, если вы «отрицаете» целую последовательность символов.
Вы можете использовать
let str = "TESTING \\(hello) 123 \\(HOW ARE YOU)"
let pattern = "\\s*\\\\\\([^()]*\\)\\s*"
let result = str.replacingOccurrences(of: pattern, with: "\0", options: .regularExpression)
print(result.components(separatedBy: "\0").filter({ $0 != ""}))
Выход: ["TESTING", "123"]
Идея состоит в том, чтобы сопоставить то, что вам не нужно, и заменить их нулевым символом, а затем разбить строку на этот нулевой символ.
Детали шаблона
\s*
- 0+ пробелов
\\\(
- подстрока \(
[^()]*
- 0+ символов кроме (
и )
\)
- )
char
\s*
- 0+ пробелов.
Результаты могут содержать пустые строки, поэтому для их фильтрации используется .filter({ $0 != ""})
.