Я использую правило JavaScript
RegEx
, чтобы сопоставить строки url
и автоматически преобразовывать их в элемент ссылки при вводе.
Это было мое RegEx
правило:
/^(((http(s)?|(ftp(s)?)):\/\/)(www\.)?([a-zA-Z0-9][a-zA-Z0-9\.\/-]+[a-zA-Z0-9]\.[^\s]{2,})+(\:[0-9]{5})?|(mailto:){1}([\w\.]+)\@{1}[\w]+\.[\w]{2,})\s$/gm;
В конце правила я определяю пробел с помощью \s
в сочетании с якорем $
. Поэтому, когда пользователь вводит https://www.google.com
и нажимает пробел в конце, чтобы продолжить ввод, url
преобразуется в элемент ссылки.
Мне пришлось удалить первый якорь ^
в начале правила, чтобы игнорировать строки, введенные перед моим URL, например, например. hello world https://www.google.com
/(((http(s)?|(ftp(s)?)):\/\/)(www\.)?([a-zA-Z0-9][a-zA-Z0-9\.\/-]+[a-zA-Z0-9]\.[^\s]{2,})+(\:[0-9]{5})?|(mailto:){1}([\w\.]+)\@{1}[\w]+\.[\w]{2,})\s$/gm;
Так как я удалил первый якорь, который отмечает начало RegEx
, я трижды ударил space
в конце, чтобы соответствовать правилу.
например. с якорем ^
:
(печатать) https://www.google.com
+ пробел в конце -> правило соответствует. Нажав еще один пробел, вы вставите пробел, и я смогу продолжить запись.
например. без якоря ^
:
(печатать) https://www.google.com
+ пробел в конце -> правило соответствует. Хит в другом месте -> ничего не происходит. Хит пробел в третий раз вставит пробел, и я могу продолжать писать. Так что есть дополнительное место.
Я пытался вставить \s$
в конце каждого правила, но не помогло:
/(((http(s)?|(ftp(s)?)):\/\/)(www\.)?([a-zA-Z0-9][a-zA-Z0-9\.\/-]+[a-zA-Z0-9]\.[^\s]{2,})+(\:[0-9]{5})?)\s$|((mailto:){1}([\w\.]+)\@{1}[\w]+\.[\w]{2,})\s$/gm
Есть идеи? Надеюсь, что описание проблемы понятно.