Экспортирует класс URLFinder
.
Конструктор: new URLFinder(tlDomains, localDomains)
, где tlDomains — массив доменов 1-го уровня, которые должны распознаваться без явного указания протокола,
localDomains — массив доменов, ссылки в которых считаются локальными.
Поле: withHashTags = false
— нужно ли определять в тексте хэш-теги (по умолчанию false). Синтаксис хэш-тегов см. в файле hashtag-syntax.md.
Поле: withArrows = false
— нужно ли определять в тексте стрелки-ссылки (^^^
или ↑↑↑
).
Метод: parse(text)
— разбивает строку текста на список блоков следующих типов:
{type: "text", text: "aa "} // простой текст
{type: "link", text: "google.com", url: "http://google.com/"} // внешняя ссылка
{type: "atLink", text: "@alice", username: "alice"} // @-ссылка с username
{type: "localLink", text: "freefeed.net/abc", uri: "/abc"} // локальная ссылка (в одном из доменов localDomains)
{type: "email", text: "aa@bb.ru", address: "aa@bb.ru"} // адрес e-mail
{type: "hashTag", text: "#3pm", hashTag: "3pm"} // хэш-тег
{type: "arrow", text: "^^^", count: 3} // стрелка-ссылка
Везде: type — тип блока, text — текст, который должен показываться пользователю (текст внутри тега A для ссылок). Остальные поля типо-специфичны.
Статический метод URLFinder.shorten(url, max_length)
— возвращает url, укороченный до длины не большей max_length (без учёта протокола).
- Понимает ссылки без явно указанного протокола (для заданного набора TLD);
- В тексте для пользователя делает urldecode, а также преобразует IDN к человекопонятному виду;
- Правильно обрабатывает концевые скобки в URL;
- Распознаёт стрелки-ссылки, при этом знает, что такое
10^6
или(=^・^=)
.