我正在尝试使用joi和express查找正则表达式以匹配目录路径
我的要求是这个
test/upload- Valid
test/upload/123/123/123/ - valid (These can be a nested folder)
我已经尝试了许多通过正则表达式使用joi的方法,但是仍然失败。我还要在屏幕截图中附加测试数据和正则表达式,这是
/^test?([a-z0-9A-Z ]{1,}\/)+/ //this is defined as pattern 1
如果有人可以帮助我,我将非常感激。我已经盯着这个很久了
这是我的joi字符串
ilepath: Joi.string().regex(pattern1).required(),
答案 0 :(得分:2)
您的正则表达式通过使用s?
来使s可选,并且还将匹配tesing/
,其中ing/
将在第一个捕获组中,因为([a-z0-9A-Z ]+\/)
将匹配直到正斜杠。
如果您只想匹配但不引用捕获组,则可以将其设为非捕获组(?:
并重复该操作。
^test\/(?:[A-Z \d]+\/)*$
那将匹配:
^
断言字符串的开头test\/
匹配测试/ (?:
非捕获组
[A-Z \d]+\/
字符类,与大写字符,空格或数字相加1倍以上,后跟正斜杠。使用/i
标志来区分大小写)*
关闭非捕获组并重复0次以上$
声明字符串的结尾答案 1 :(得分:1)
您要做的就是将对斜线'/
'的检查移到捕获组的前面,如下所示:
/^test(\/[a-z0-9A-Z ]{1,})*/
现在它将与'test'
和所有子目录匹配。