Вы можете искать повторяющиеся шаблоны /foo
, /{bar}
или просто пустой /
. Фрагмент кода:
var input = [
'/test3/{id}/{test}/{id}',
'/admin/{slug}',
'/test3{id}{test}',
'/test/{id}/yyy/{dd}/dwdw/{wd}{d}',
'/user/post/{id}',
'/{tt}/{t}',
'/test/{id}/yyy/{dd}////dwdw/{wd}/{d}'
];
input.forEach(function(str) {
var result = /^(\/([a-zA-Z0-9]*|\{[a-z]+\}))+$/.test(str);
console.log(str + ' ==> ' + result);
});
Вывод:
/test3/{id}/{test}/{id} ==> true
/admin/{slug} ==> true
/test3{id}{test} ==> false
/test/{id}/yyy/{dd}/dwdw/{wd}{d} ==> false
/user/post/{id} ==> true
/{tt}/{t} ==> true
/test/{id}/yyy/{dd}////dwdw/{wd}/{d} ==> true
Объяснение /^(\/([a-zA-Z0-9]*|\{[a-z]+\}))+$/
regex:
^
- привязка в начале строки (...)+
- одно или несколько случаев того, что находится внутри \/(...|...)
- ожидается sla sh, за которым следует логическая группа OR [a-zA-Z0-9]*
- первый элемент ИЛИ: только буквенно-цифровые c символы, включая ни одного \{[a-z]+\}
- второй элемент ИЛИ: один или несколько символов в нижнем регистре, заключенные в {...}
$
- якорь в конце строки