尝试匹配/测试完全合格的sub.domain.com:1000或127.0.0.1:1000

时间:2016-01-21 17:31:57

标签: javascript regex

我正在尝试匹配至少所需的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逻辑

1 个答案:

答案 0 :(得分:0)

/(\w+(\.\w+)+|\d{1,3}(\.\d{1,3}){3})(:\d+)?/
  • \w+(\.\w+)+匹配www2.sub.doh-mein.comsub.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+)?/