Проверка по маске
Привет. Нужна помощь по регулярке. У меня есть location.pathname и мне надо сравнить его с маской такого вида
news/* или news/sub/* и тп. То есть если последний символ *, значит вместо неё могут быть [a-z], _,[0-9],.,-. Как это сказать системе? |
ureech,
let reg = /news\/(sub\/)?[-a-z.0-9_]/; let arr = ['news/-', 'news/sub/_','news/.','news/?'].map(e => reg.test(e)); alert(arr); |
Цитата:
Для последовательности так /^news\/(sub\/)?[a-z_0-9.\-]+$/ |
Нет. Изначальная строка не такая /news\/(sub\/)?[-a-z.0-9_]/, а такая [a-z]/* и нужно сказать, что #\*# это [-a-z.0-9_]
|
И да * это последовательность [-a-z.0-9_]
|
То есть маска такая news/*.
location.pathname = 'news/sub/index.html' или 'news/sub/' или ... И нужно что бы при сравнении'news/*' == location.pathname |
ureech,
слишком много слов, не осилил))) |
Цитата:
|
Мне нужна регулярка, которая скажет, что
'#\*#' == '#[a-z_0-9.\-]+#'; |
ureech,
не понимаю, всё что мог, написал выше. |
Ок, спасибо
|
Цитата:
|
Есть массив
var arr = [ "news", "posts/*", "articles/statiy" ] Это разрешённые маски адресов страниц над которыми можно выполнять определённые действия. Я получаю адрес страницы. Например он var adr = 'posts/index.html' Перебираю arr и сравниваю c помощью регулярки for(key in arr){ var rex = '' // вот тут нужна регулярка. И что бы в том числе 'posts/index.html' попадал в маску "posts/*" if(adr.match(rex)){...} } |
Решил на стороне сервера.
|
ureech,
const escapeRegExp = str => str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); const createRegExp = str => { str = str.split('*'); str = str.map(e => escapeRegExp(e)); str = str.join('[-a-z.0-9_]+'); return new RegExp('^' + str + '$') }; let arr = ["news", "posts/*", "articles/statiy"]; arr = arr.map(createRegExp); let adr = 'posts/index.html'; let test = arr.some(reg => reg.test(adr)) alert([adr, test]); adr = 'posts/проверка.html'; test = arr.some(reg => reg.test(adr)); alert([adr, test]) |
Часовой пояс GMT +3, время: 14:15. |