RegEx: конец правила обнаружен слишком поздно, если не используется ^ якорь - PullRequest
0 голосов
/ 01 июля 2019

Я использую правило 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

Есть идеи? Надеюсь, что описание проблемы понятно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...