Более общим способом является использование группы захвата:
let pattern = "junkasdojf\\s*(:[^:]*:)"
Пример кода Swift:
let str = "Some string here, junkasdojf :text: and more here"
let pattern = "junkasdojf\\s*(:[^:]*:)"
do {
let regex = try NSRegularExpression(pattern: pattern)
if let match = regex.firstMatch(in: str, range: NSRange(str.startIndex..., in: str)) {
let result = str[Range(match.range(at: 1), in: str)!]
print(String(result))
}
} catch { print(error) }
См. демонстрационное выражение regex .
Здесь junkasdojf
соответствует подстроке, которая является левым контекстом для нужной вам строки, \s*
соответствует 0+ пробелов, а (:[^:]*:)
вводит в группу 1 двоеточие, любое 0+ символы, отличные от :
, а затем :
.
В качестве альтернативы, если количество пробелов между junkasdojf
и :
не может превышать некоторый максимальный порог, вы можете использовать ограниченное значение с поддержкой ширины канала :
let s = "Some string here, junkasdojf :text: and more here"
if let rng = s.range(of: ":(?<=junkasdojf\\s{0,1000}:)[^:]*:", options: .regularExpression) {
print(s[rng])
}
Это не сработает в regex101, так как не поддерживает ICU-регулярное выражение, но при этом предполагается, что между junkasdojf
и пробелами может быть не более 1000 пробелов.следующий :
.:(?<=junkasdojf\\s{0,1000}:)[^:]*:
соответствует :
, затем проверяется, что junkasdojf
сопровождается от 0 до 1000 пробелов и :
(это необходимо для привязки к первому :
), а затем [^:]*
соответствует нулю или болеесимволы, отличные от :
, а затем :
соответствует :
.
Кроме того, если вас интересует самое короткое из возможных регулярных выражений, но вы можете заменить входную строку регулярным выражением, используя
let s = "Some string here, junkasdojf :text: and more here"
let result = s.replacingOccurrences(of: "(?s).*junkasdojf\\s*(:[^:]*:).*", with: "$1", options: .regularExpression, range: nil)
print(result)
Выход: :text:
.
См. Демонстрационное регулярное выражение
Подробности
(?s)
- модификатор, который позволяет .
сопоставлять символы разрыва строки .*
- любые 0+ символов максимально возможного числа junkasdojf
- подстрока \\s*
- 0+ пробелов (:[^:]*:)
- Группа захвата 1 ($1
): двоеточие, 0 или более символов, отличных от :
, двоеточие .*
- любые 0+ символов как можно больше