Как сделать регулярное выражение, которое соответствует двум подстрокам, которые разделены другими строками - PullRequest
1 голос
/ 24 марта 2020

У меня есть эта строка https://mywebsite.com/myPets/localPets#name=testz0, и я хотел бы проверить, есть ли в этой строке шаблон name и есть zx, где x - любое неотрицательное целое число.

Поэтому https://mywebsite.com/myPets/localPets#name=testz0 должен вернуть да

https://mywebsite.com/myPets/localPets#name=test должен вернуть нет из-за того, что zx часть отсутствует.

https://mywebsite.com/myPets/localPets#name=testz999 должна вернуть да

https://mywebsite.com/myPets/localPets#=testz0 не должен возвращаться из-за name missing

Я сам не могу выяснить, какой-либо совет?

РЕДАКТИРОВАТЬ: Я имел в виду (name)&(z(\d+)), но возвращается 0 спички, демо здесь

Ответы [ 2 ]

1 голос
/ 24 марта 2020

^(?:[^#]*#{1})(name=.*?z\d*)$ должен сделать это.

Демонстрация 1: https://regex101.com/r/rnaul7/1

Демонстрация 2:

const regex = /^(?:[^#]*#{1})(name=.*?z\d*)$/;
const url = 'https://mywebsite.com/myPets/localPets#name=testz0'
const result = regex.exec(url);

console.log(result[1])

Объяснение:

  1. ^ начало, соответствует позиции перед первым символом в строке
  2. (?:[^#]*#{1})
    • ?: Группа без захвата.
    • [^#]* соответствует любому символу, который не является #.
    • #{1} # должен встречаться в URL только один раз, поскольку путь URL заканчивается либо ?, либо #. (см. 5-ю тестовую строку в демонстрационной версии 1)
  3. (name=.*?z\d*):.
    • () Группа захвата
    • name= не требует пояснений
    • .*? не жадное выражение, соответствует любому символу
    • z self -объяснительная
    • \d* только совпадающие цифры
  4. $ конец, соответствует сразу после последнего символа в строке
0 голосов
/ 24 марта 2020

Я бы go с location.hash, чтобы извлечь # часть сайта. Затем разделите на =, отметьте key=value. Если key != name, у вас будет name missing дело.

Затем проверьте /testz\d+/, чтобы разобраться с остальными тремя делами.

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