Не удается найти заглавную букву в URL с помощью Regex - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть следующее регулярное выражение:

(href[\s]?=[\s]?)(\"[^"]*\/*[^"]*\")

с использованием следующей тестовой строки:

href="http://mysite.io/Plan-documents"

Я получаю две группы захвата. Один с href =, а другой - все, что прошло. Теперь я хочу отображать совпадения только там, где есть заглавная буква в любом месте второй группы захвата. Я попробовал:

(href[\s]?=[\s]?)(\"[A-Z]*[^"]*\/*[^"]*\")

, чтобы попытаться вернуть это регулярное выражение только с URL-адресами, в которых есть заглавные буквы. Неудачно. В любом случае, если я изменю тестовую строку как:

 href="http://mysite.io/plan-documents"

Я все еще получаю совпадение. Я хочу сопоставить строку href только в том случае, если в строке после href = есть хотя бы одна заглавная буква.

Спасибо.

1 Ответ

2 голосов
/ 12 апреля 2019

Вы не получите правильные совпадения, потому что во второй группе захвата все, что находится между двойными кавычками, использует квантификатор *, который соответствует 0 или более раз.

Сначала двигатель соответствует 0+ раз [A-Z]*.Это не присутствует, но это нормально, из-за квантификатора 0+ раз.Тогда следующая часть [^"]* будет совпадать до тех пор, пока не встретит следующую "

Следующая \/* не существует, но также в порядке из-за квантификатора 0+ раз, за ​​которым следует [^"]*, которыйтакже хорошо.

Вместо этого вы можете сначала сопоставить не верхний регистр, пока вы не сопоставите верхний регистр, а затем сопоставить до закрывающих двойных кавычек.

(href\s?=\s?)("[^A-Z\s]*[A-Z][^\s"]*")

Объяснение

  • (href\s?=\s?) Группа захвата, совпадение href = в окружении необязательного пробела
  • (" Запуск группы захвата и сопоставление "
    • [^A-Z\s]*Совпадение 0+ раз не в верхнем регистре или пробеле
    • [A-Z] Совпадение 1 в верхнем регистре
    • [^"\s]* Совпадение 0+ раз не " или пробел
  • ") Совпадение " и закрытие группы захвата

Regex demo

Без использования групп вы можете использовать:

href\s?=\s?"[^A-Z\s]*[A-Z][^\s"]*"

Regex demo

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