Regex如果是有效的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 第二个选项与: 您可以将其移动到备选方案

我正在尝试为有效的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

第二个选项与

您可以将其移动到备选方案之外,以匹配这两个选项

如果不需要捕获组,可以省略它们

可缩短第一次替换,使额外的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://
  • ([0-9]{1,3}(?:[0-9]{1,3}}{3}{a-zA-Z]+)
    -1到3位数字,后跟3次出现的
    和1到3位数字或1+字母(或者,如果使用了
    [^\/]+
    ,1+字符,而不是
    /
  • -
  • ([0-9]{1,5})
    -1到5位
  • $
    -字符串结束

另请参见a。这不适用于FQDN。您需要扩展[a-zA-Z]+部分以匹配任何域名。@JánStibila这不是这里的问题,但
[a-zA-Z]
可以替换为
[^/]
以匹配任何字符,但
/
。问题要求“regex用于有效的websocket地址”。ws://example.com:5555是有效地址。[^/]不起作用,因为有无效字符不能在域名中使用(例如空格字符)。@JánStibila Ok,适用于当前名称。