我正在尝试匹配至少所需的sub.domain.com
或任何符合条件的内容,例如破折号,数字等。但为了示例,可能会匹配/测试真实的东西。
www2.sub.doh-mein.com
www.sub1-2.doh-mein3.com
sub.domain.com
www2.sub.doh-mein.com:32000
www.sub1-2.doh-mein3.com:32000
sub.domain.com:32000
123.456.789.321
123.456.789.321:32000
我的第一次尝试让我得到了一些工作得很好的东西,但不完全是这种模式是/曾经/^([a-z0-9-.]+)(:d{1,5})?$/i
我后来发现自己
^((([a-z0-9|-]+.)*)([a-z0-9|-]+.)([a-z]+))(:d{1,5})?$
这最终成为前者的过度美化版本。也就是说,有什么方法可以让我要求特定的最小排序,而其他一切都是可选的。最小值为 sub.domain.com
或 IP 地址格式的字符串。从那里我没有在同一个字符串上运行多个正则表达式模式,希望不会用一堆 if-else 逻辑过多地污染我的代码
/(w+(.w+)+|d{1,3}(.d{1,3}){3})(:d+)?/
-
w+(.w+)+
匹配www2.sub.doh-mein.com
,sub.domain.com
-
d{1,3}(.d{1,3}){3}
比赛123.456.789.321
-
(:d+)?
匹配可选端口,例如:32000
通过将?:
放在括号的开头以指示您不想反向引用它们,可以提高性能:
/(?:w+(?:.w+)+|d{1,3}(?:.d{1,3}){3})(?::d+)?/