正则表达式不匹配字符串中超过一个的尾部斜杠
Regex to not match more than one trailing slash in string
正在寻找不匹配超过 1 次尾部斜线的正则表达式
api/v1
/api/v1
/api/2v1/21/
/api/blah/v1/
/api/ether/v1//
/api/23v1///
预期匹配
/api/v1
/api/2v1/21/
/api/blah/v1/
我尝试了什么:
^\/([^?&#\s]*)(^[\/{2,}\s])$
您可以使用
^(?:/[^/?&#\s]+)*/?$
参见regex demo。
详情
^
- 字符串开头
(?:/[^/?&#\s]+)*
- /
字符的零次或多次重复,后跟一个或多个非 /
、?
、&
、#
和空格
/?
- 一个可选的 /
$
- 字符串结尾。
通过使用负数lookahead:
^(?!.*//)/.*
在您尝试的模式中,模式的第二部分无法匹配,它断言字符串的开头 ^
然后匹配一个 单个 字符在字符 class (^[\/{2,}\s])$
后面紧跟断言字符串的结尾。
^\/([^?&#\s]*)(^[\/{2,}\s])$
^^^^^^^^^^^^^^
但是你已经在这里声明了字符串的开头^\/
您可以重复以 /
开头的模式,然后重复 1 次以上您已有的字符 class:
^(?:\/[^\/?&#\s]+)+\/?$
说明
^
字符串开头
(?:\/[^\/?&#\s]+)+
重复 1+ 次 /
和 1+ 个字符而不是列出的
\/?
可选 /
$
字符串结束
看到一个regex demo
正在寻找不匹配超过 1 次尾部斜线的正则表达式
api/v1
/api/v1
/api/2v1/21/
/api/blah/v1/
/api/ether/v1//
/api/23v1///
预期匹配
/api/v1
/api/2v1/21/
/api/blah/v1/
我尝试了什么:
^\/([^?&#\s]*)(^[\/{2,}\s])$
您可以使用
^(?:/[^/?&#\s]+)*/?$
参见regex demo。
详情
^
- 字符串开头(?:/[^/?&#\s]+)*
-/
字符的零次或多次重复,后跟一个或多个非/
、?
、&
、#
和空格/?
- 一个可选的/
$
- 字符串结尾。
通过使用负数lookahead:
^(?!.*//)/.*
在您尝试的模式中,模式的第二部分无法匹配,它断言字符串的开头 ^
然后匹配一个 单个 字符在字符 class (^[\/{2,}\s])$
后面紧跟断言字符串的结尾。
^\/([^?&#\s]*)(^[\/{2,}\s])$
^^^^^^^^^^^^^^
但是你已经在这里声明了字符串的开头^\/
您可以重复以 /
开头的模式,然后重复 1 次以上您已有的字符 class:
^(?:\/[^\/?&#\s]+)+\/?$
说明
^
字符串开头(?:\/[^\/?&#\s]+)+
重复 1+ 次/
和 1+ 个字符而不是列出的\/?
可选/
$
字符串结束
看到一个regex demo