Регулярное выражение для определения URL в простой форме и в уценке

Я пытаюсь записать пользовательский ввод в текстовой области, которая может быть URL-адрес (и аналогично электронной почте) в любом из трех форматов -

  1. Просто простой URL.
  2. Уценка с заголовком [text](url "title")
  3. Уценка без названия [text](url)

Теперь у меня есть регулярное выражение (javascript) для каждого из трех отдельных форматов, которые работают сами по себе. Но если я хочу сделать все 3, первый препятствует активации второго и третьего. В моем коде на "пробел" срабатывает обнаружение регулярных выражений. Поэтому, если у меня есть первое регулярное выражение, то оно с заголовком уценки никогда не сработает.

Я задаюсь вопросом, возможно ли иметь регулярное выражение для первого, которое специально исключает формат второго и третьего? Или, что еще лучше, если есть одно регулярное выражение для захвата, которое соответствует всем 3?

Кроме того, поскольку я не очень хорош в Regex, я бы хотел, чтобы кто-то также мог объяснить свое решение Regex, чтобы я мог попытаться сделать то же самое для обнаружения электронной почты.

Спасибо!

1 ответ

Решение

Во-первых, второе регулярное выражение уже работает для третьего формата, поэтому нам нужно только объединить первый и второй.

Простой способ сделать это - использовать | ("ИЛИ"), например:

(<firstRegex>)|(<secondRegex>)

демонстрация

Проблема с этим в том, что это мешает группам захвата. Если регулярное выражение поймает первый шаблон, URL будет в другой группе захвата (4-й в моей демонстрации), чем если бы он был захвачен второй (2-й группой).

Исключая шаблон уценки в регулярном выражении URL

Добавление (?:^|[^\(\/]) в начале простого шаблона URL-адреса регулярное выражение будет соответствовать любому символу, который не является открывающей скобкой, исключая, таким образом, регистр уценки. URL должен быть извлечен с использованием группы захвата, так как этот символ будет включен в совпадение.

демонстрация

Другие вопросы по тегам