我正在尝试编写一个表达式,该表达式以“#”开头,接受以下类型的路径,只接受字符A-z/a-z,不接受数字或特殊字符:有效路径示例:
#/ #/word/word #/word #/word/word/word
这是我目前拥有的:
#\/\D+|\/\D+
我也试过:
#\/\D+|\s\/^[A-Za-z\s]*$
它可以正确过滤85%的路径,但仍接受包含特殊字符(如“#/word/word?test=word”“#/word/word=%”)的路径我不太确定我错过了什么。
2skhul331#
我会将正则表达式表述为:
^(?:#/|#/[A-Za-z]+(?:/[A-Za-z]+)*)$
此正则表达式表示匹配:
^
(?:
#/
|
[A-Za-z]+
(?:/[A-Za-z]+)*
)
$
h5qlskok2#
您可以从#/开始比对,然后选择性地比对结尾部分:
^#\/(?:[A-Za-z]+(?:\/[A-Za-z]+)*)?$
说明
#\/
(?:\/[A-Za-z]+)*
/
)?
请参见regex demo。
2条答案
按热度按时间2skhul331#
我会将正则表达式表述为:
此正则表达式表示匹配:
^
(从字符串开头算起)(?:
#/
单独匹配#/
|
或#/
匹配#/
[A-Za-z]+
后跟路径名(?:/[A-Za-z]+)*
,后跟零个或多个其他路径)
$
字符串结尾Demo(第一个字母)
h5qlskok2#
您可以从
#/
开始比对,然后选择性地比对结尾部分:说明
^
字符串开头#\/
匹配#/
(?:
非捕获组[A-Za-z]+
匹配1个以上字符A-Za-z(?:\/[A-Za-z]+)*
可选地重复/
和1+个字符A-Za-z)?
关闭非捕获组并将其设置为可选$
字符串结束请参见regex demo。