У меня проблема с регулярным выражением. У меня есть это регулярное выражение:
/(https|http):\/\/(kwagmire)\.(com)\/(embed)\/([a-zA-Z0-9]+)/i
, и оно корректно захватывает на https://regexr.com, но на Ruby on Rails все, что с
http://kwagmire.com/embed/1QgJVmCam
возвращает истинное значение, я думаю, потому что оноустанавливает его с флагом global
, который мне не нужен.
Я пробовал match
и scan
, но все равно то же самое возвращает истинное значение, если ссылка видна. Я просто хочу, чтобы он был конкретным.
https://kwagmire.com/embed/1QgJVmCam < I want to return success this one is ok when testing on console
http://kwagmire.com/embed/1QgJVmCam < I want to return success also this on returns good
https.evil.com/http://jsitor.com/embed/1QgJVmCam < I want to return fail or nil, this one passes returns all match
facebook.com < I want to return fail or nil this one is good because its failing
https://google.com < I want to return fail or nil also this good failed
www.twitter.com < I want to return fail or nil
http://kwagmire.com/embed/1QgJVmCam/?onload(alert('asdfadsf')) < I want to return fail or nil, this one also is filing, good
http://kwagmire.com/embed/1QgJVmCam/ onload(alert('asdfadsf')) < I want to return fail or nil, this one returns match too but should faul
http://kwagmire.com/embed/1QgJVmCam/?onload(alert('asdfadsf')) < I want to return fail or nil, this one returns match too, this should fail
в основном я хочу это https://kwagmire.com/embed/1QgJVmCam
, все остальное должно возвращать ноль или ложь. Есть ли простой способ без зацикливания? Я думаю, что решение этой проблемы - убрать глобальный флаг или g
, но у вас есть такая опция? если да, то почему, если я сделаю это
, посмотрите i
после /
/(https|http):\/\/(jsitor)\.(com)\/(embed)\/([a-zA-Z0-9]+)/i.match("http://jsitor.com/embed/1QgJVmCam/ onload(alert('asdfadsf'))")
и вернётесь, но это не получится
#<MatchData "http://jsitor.com/embed/1QgJVmCam" 1:"http" 2:"jsitor" 3:"com" 4:"embed" 5:"1QgJVmCam">