Можно ли настроить 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построить.

0 ответов

Другие вопросы по тегам