regex 如何在此正则表达式中接受端口号?

aiazj4mn  于 2023-04-22  发布在  其他
关注(0)|答案(1)|浏览(131)

这是url验证正则表达式

/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/

这可以正常工作。但是如果我输入带有端口号的url,例如http://localhost:3000,它会给出一个错误。
如何将此表达式更改为也接受端口号?

xtupzzrd

xtupzzrd1#

请试试这个
https?:\/\/(?:w{1,3}\.)?[^\s.]+(?:\.[a-z]+)*(?::\d+)?(?![^<]*(?:<\/\w+>|\/?>))
https?:这部分匹配URL的协议。s是可选的,所以它匹配http和https。
:\/\/:匹配协议中的冒号和两个正斜杠。
(?:w{1,3}\.)?:如果存在,则匹配可选的www子域。(?:)创建一个非捕获组,{1,3}量词匹配字母“w”的1到3个示例。
[^\s.]+:匹配域名,域名由一个或多个非空格或点的字符组成。
(?:\.[a-z]+)*:匹配域之前的所有可选子域,以点分隔。(?:)创建另一个非捕获组,* 量词匹配该组的零个或多个示例。[a-z]+匹配一个或多个小写字母。
(?::\d+)?:这匹配一个可选的端口号,该端口号可能位于域之后,前面有一个冒号。)创建另一个非捕获组,而?限定符使其可选。匹配冒号,\d+匹配一个或多个数字。
(?![^<]*(?:<\/\w+>|\/?>)):这是一个负先行,确保URL不是HTML标签的一部分。它检查URL之前是否没有匹配(?:<\/\w+>|\/?>)模式的字符,该模式匹配任何关闭HTML标签或空标签。

相关问题