Regex如果是有效的WebSocket地址
我正在尝试为有效的websocket地址编写正则表达式,但我不知道出了什么问题。这是我已经尝试过的Regex如果是有效的WebSocket地址,regex,Regex,我正在尝试为有效的websocket地址编写正则表达式,但我不知道出了什么问题。这是我已经尝试过的 /(^ws:\/\/|^wss:\/\/)(([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\:)|([a-zA-Z]+))([0-9]{1,5})/gm 正则表达式应该与下面的匹配 ws://0.0.0.0:8080 wss://192.168.0.25:12345 ws://localhost:3333 第二个选项与: 您可以将其移动到备选方案
/(^ws:\/\/|^wss:\/\/)(([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\:)|([a-zA-Z]+))([0-9]{1,5})/gm
正则表达式应该与下面的匹配
ws://0.0.0.0:8080
wss://192.168.0.25:12345
ws://localhost:3333
第二个选项与
:
您可以将其移动到备选方案之外,以匹配这两个选项
如果不需要捕获组,可以省略它们
可缩短第一次替换,使额外的s可选:
^(wss?:\/\/)(([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})|([a-zA-Z]+)):[0-9]{1,5}$
您可以使用
/^(wss?:\/\/)([0-9]{1,3}(?:\.[0-9]{1,3}){3}|[a-zA-Z]+):([0-9]{1,5})$/
见
请注意,[a-zA-Z]+
不够,因为它只匹配ASCII字母
如果您想匹配任何字符,而不是/
,请使用[^\/]+
:
/^(wss?:\/\/)([0-9]{1,3}(?:\.[0-9]{1,3}){3}|[^\/]+):([0-9]{1,5})$/
看
要仅匹配FQDNs,请使用
/^(wss?:\/\/)([0-9]{1,3}(?:\.[0-9]{1,3}){3}|(?=[^\/]{1,254}:[0-9]{1,5}$)(?:(?=[a-zA-Z0-9-]{1,63}\.)(?:xn--+)?[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*\.)+[a-zA-Z]{2,63}):([0-9]{1,5})$/
从这个溶液中提取。他的帖子里有所有的解释。看
主要问题在于:
:它只在数字IP模式之后匹配,而不是在[a-zA-Z]+
之后匹配
详细信息
-字符串的开头^
-(wss?:\/\/)
或ws://
wss://
-1到3位数字,后跟3次出现的([0-9]{1,3}(?:[0-9]{1,3}}{3}{a-zA-Z]+)
和1到3位数字或1+字母(或者,如果使用了
,1+字符,而不是[^\/]+
)/
-:
:
-1到5位([0-9]{1,5})
-字符串结束$
[a-zA-Z]
可以替换为[^/]
以匹配任何字符,但/
。问题要求“regex用于有效的websocket地址”。ws://example.com:5555是有效地址。[^/]不起作用,因为有无效字符不能在域名中使用(例如空格字符)。@JánStibila Ok,适用于当前名称。