Регулярное выражение для определения URL в простой форме и в уценке
Я пытаюсь записать пользовательский ввод в текстовой области, которая может быть URL-адрес (и аналогично электронной почте) в любом из трех форматов -
- Просто простой URL.
- Уценка с заголовком
[text](url "title")
- Уценка без названия
[text](url)
Теперь у меня есть регулярное выражение (javascript) для каждого из трех отдельных форматов, которые работают сами по себе. Но если я хочу сделать все 3, первый препятствует активации второго и третьего. В моем коде на "пробел" срабатывает обнаружение регулярных выражений. Поэтому, если у меня есть первое регулярное выражение, то оно с заголовком уценки никогда не сработает.
Я задаюсь вопросом, возможно ли иметь регулярное выражение для первого, которое специально исключает формат второго и третьего? Или, что еще лучше, если есть одно регулярное выражение для захвата, которое соответствует всем 3?
Кроме того, поскольку я не очень хорош в Regex, я бы хотел, чтобы кто-то также мог объяснить свое решение Regex, чтобы я мог попытаться сделать то же самое для обнаружения электронной почты.
Спасибо!
1 ответ
Во-первых, второе регулярное выражение уже работает для третьего формата, поэтому нам нужно только объединить первый и второй.
Простой способ сделать это - использовать |
("ИЛИ"), например:
(<firstRegex>)|(<secondRegex>)
Проблема с этим в том, что это мешает группам захвата. Если регулярное выражение поймает первый шаблон, URL будет в другой группе захвата (4-й в моей демонстрации), чем если бы он был захвачен второй (2-й группой).
Исключая шаблон уценки в регулярном выражении URL
Добавление (?:^|[^\(\/])
в начале простого шаблона URL-адреса регулярное выражение будет соответствовать любому символу, который не является открывающей скобкой, исключая, таким образом, регистр уценки. URL должен быть извлечен с использованием группы захвата, так как этот символ будет включен в совпадение.