所以我在这里有这个正则表达式:
\/?({[a-zA-Z_0-9]*})\/?
而且我希望它与这些匹配:
# Valid
/test3/{id}/{test}/{id}
# Valid
/admin/{slug}
# Not Valid
/test3{id}{test}
# Not Valid
/test/{id}/yyy/{dd}/dwdw/{wd}{d}
# Valid
/user/post/{id}
# Valid
/{tt}/{t}
# Valid
/test/{id}/yyy/{dd}////dwdw/{wd}/{d}
但是我希望它不匹配之间没有斜杠的参数,例如{id}{test}
不匹配。
我该怎么做?
我在这里设置了正则表达式:https://regex101.com/r/awUDhM/5
您可以查找/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]+\}))+$/
正则表达式的解释:
^
-字符串开头的锚点(...)+
-内部发生的一个或多个事件\/(...|...)
-预期为斜杠,后跟逻辑OR组[a-zA-Z0-9]*
-第一个OR项目:仅字母数字字符,不包括任何字符\{[a-z]+\}
-第二个OR项目:{...}
]中包含的一个或多个小写字符>$
-字符串末尾的锚点