我在创建正则表达式以匹配 URL slug 时遇到问题(基本上,字母数字“单词”由单个破折号分隔)
this-is-an-example
我想出了这个正则表达式:/[a-z0-9\-]+$/
虽然它将字符串限制为只有字母数字字符和破折号,但它仍然会产生一些误报,如下所示:
-example
example-
this-----is---an--example
-
我对正则表达式很不好,所以任何帮助都将不胜感激。
你可以使用这个:
/^
[a-z0-9]+ # One or more repetition of given characters
(?: # A non-capture group.
- # A hyphen
[a-z0-9]+ # One or more repetition of given characters
)* # Zero or more repetition of previous group
$/
这将匹配:
一个更全面的正则表达式将匹配 slug 中的 ascii 和非 ascii 字符,
/^ # start of string
[^\s!?\/.*#|] # exclude spaces/tabs/line feed.. as well as reserved characters !?/.*#
+ # match one or more times
$/ # end of string
为了更好地衡量,我们排除了保留的 URL 字符。
所以例如,上面将匹配
une-ecole_123-soleil
une-école_123-soleil
une-%C3%A9cole-123_soleil