Можно ли настроить Swift RegexBuilder DSL Capture '.url' для работы с ссылкой Markdown?
Можно ли настроить Swift RegexBuilder DSL
.url(…)
точно захватить URL-адрес в стандартном синтаксисе ссылок Markdown? Если да, то как?
Минимальная попытка шаблона
let inputMD = "[Markdown link text](https://example.com)"
let regexMD = Regex {
Capture { .url() }
}
let matchMD = inputMD.firstMatch(of: regexMD)
print("matchMD →", matchMD?.output ?? "nil")
// matchMD → ("https://example.com)", https://example.com))
Попытка минимального шаблона не удалась, так как результатhttps://example.com)
включает замыкание синтаксиса ссылки Markdown.
Закрытие попытки шаблона Paren
Закрывающая скобка Markdown)
добавляется к следующему регулярному выражению:
let regexMD_2 = Regex {
Capture { .url() }
")" // :ADDED:
}
let matchMD_2 = inputMD.firstMatch(of: regexMD_2)
print("matchMD_2 →", matchMD_2?.output ?? "nil")
// matchMD_2 → nil
let regexMD_3 = Regex {
"(" // :ADDED:
Capture { .url() }
")" // :ADDED:
}
let matchMD_3 = inputMD.firstMatch(of: regexMD_3)
print("matchMD_3 →", matchMD_3?.output ?? "nil")
// matchMD_3 → nil
Попытка закрытия шаблона Paren терпит неудачу, возвращаяnil
.
Наблюдение:
Вот еще один тестовый пример уценки:
[Bracket_(architecture) ⇗](https://en.wikipedia.org/wiki/Bracket_(architecture))
Ссылка на уценку с несколькими()
пары делают предварительный просмотр и связывают OK через markdown-preview-enhanced. Однако подсветка синтаксиса StackOverflow не совсем точна. И, базовый "как есть" не успешен.
Примечание. У меня есть другие подходы к регулярному выражению, которые успешно захватывают URL-адрес из ссылки Markdown. Этот вопрос относится к использованию
.url()
внутри
RegexBuilder
Capture
построить.