Я знаю, что об этом спрашивали тысячу раз раньше (извинения), но, ища SO / Google и т. Д., Я еще не получил окончательного ответа.
По сути, мне нужна функция JS, которая при передаче строки идентифицирует и извлекает все URL-адреса на основе регулярного выражения, возвращая массив всего найденного. например:
function findUrls(searchText){
var regex=???
result= searchText.match(regex);
if(result){return result;}else{return false;}
}
Функция должна уметь обнаруживать и возвращать любые потенциальные URL-адреса. Я знаю о внутренних трудностях / проблемах с этим (закрывающие круглые скобки и т. Д.), Поэтому я чувствую, что процесс должен быть:
Разделите строку (searchText
) на отдельные разделы, начиная / заканчивая) либо без ничего, либо с пробелом, либо с возвратом каретки по обе стороны от нее, в результате получаются отдельные фрагменты содержимого, например сделать шпагат.
Для каждого фрагмента контента, который возникает в результате разделения, проверьте, соответствует ли он логике URL-адреса любой конструкции, а именно, содержит ли он точку, непосредственно следующую за текстом (одно постоянное правило для определения потенциального URL-адреса).
Регулярное выражение должно видеть, следует ли сразу за точкой другой текст допустимого типа для tld, структуры каталогов и строки запроса, которому предшествует текст допустимого типа для URL-адреса.
Я знаю, что могут возникнуть ложные срабатывания, однако любые возвращаемые значения затем будут проверяться с вызовом самого URL-адреса, поэтому это можно игнорировать. Другие функции, которые я часто обнаруживал, также не возвращают строку запроса URL-адреса, если она есть.
Таким образом, из блока текста функция должна иметь возможность возвращать любой тип URL, даже если это означает идентификацию will.i.am как действительного!
например. http://www.google.com, google.com, www.google.com, http://google.com, ftp.google.com, https: // и т. д. и любые их производные со строкой запроса должны быть вернулся ...
Большое спасибо, еще раз извиняюсь, если это существует где-то еще на SO, но мои поиски не вернули его ..