У меня есть эта строка https://mywebsite.com/myPets/localPets#name=testz0, и я хотел бы проверить, есть ли в этой строке шаблон name и есть zx, где x - любое неотрицательное целое число.
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=test
https://mywebsite.com/myPets/localPets#name=testz999 должна вернуть да
https://mywebsite.com/myPets/localPets#name=testz999
https://mywebsite.com/myPets/localPets#=testz0 не должен возвращаться из-за name missing
https://mywebsite.com/myPets/localPets#=testz0
name missing
Я сам не могу выяснить, какой-либо совет?
РЕДАКТИРОВАТЬ: Я имел в виду (name)&(z(\d+)), но возвращается 0 спички, демо здесь
(name)&(z(\d+))
^(?:[^#]*#{1})(name=.*?z\d*)$ должен сделать это.
^(?:[^#]*#{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})
?:
[^#]*
#
#{1}
?
(name=.*?z\d*)
()
name=
.*?
z
\d*
$
Я бы go с location.hash, чтобы извлечь # часть сайта. Затем разделите на =, отметьте key=value. Если key != name, у вас будет name missing дело.
location.hash
=
key=value
key != name
Затем проверьте /testz\d+/, чтобы разобраться с остальными тремя делами.
/testz\d+/