Используйте это ...
var all_matches = your_string.match(re);
console.log(all_matches)
Он вернет массив всех совпадений ... Это будет работать нормально ... Но помните, что он не будет принимать группы в учетной записи. Он просто вернет полные совпадения ...
Я нашел это решение после нескольких дней поиска:
func getHeaderInformations (myUrl: URL, completion: @escaping (_ content: String?) -> ()) {
var request = URLRequest(url: myUrl)
request.httpMethod = "HEAD"
let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
guard error == nil, let reponse = response as? HTTPURLResponse, let contentType = reponse.allHeaderFields["Content-Type"],let contentLength = reponse.allHeaderFields["Content-Length"]
else{
completion(nil)
return
}
let content = String(describing: contentType) + "/" + String(describing: contentLength)
completion(content)
}
task.resume()
}
Использование выглядит так:
getHeaderInformations(for: url, completion: { content in
print(content ?? 0)
})
Надеюсь, этот ответ может помочь кому-то.
Вы должны использовать этот пример кода запроса HEAD, который вы отправили, но вместо использования двух функций и двух веб-запросов выполните 1 функцию с именем getHeaders, которая возвращает request.allHeaderFields
. Затем вы можете сделать метод, который вызывает getHeaders, и если Content-Length и Content-Type - это то, что вы ожидаете, затем выполните запрос GET для фактической загрузки данных.
Этот подход будет более эффективным для пользователя и сервера, потому что они будут делать только 1 запрос HEAD вместо 2.