2016-01-21 72 views
1

我试图匹配至少需要sub.domain.com或任何符合条件,如破折号,数字等等。但为了举例的目的,可能会匹配/测试true。试图匹配/测试完全合格的sub.domain.com:1000或127.0.0.1:1000

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逻辑

回答

0
/(\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+)?匹配一个可选端口eg :32000

,性能可能通过将?:在括号开始得到改善,表示你不想回引用它们:

/(?:\w+(?:\.\w+)+|\d{1,3}(?:\.\d{1,3}){3})(?::\d+)?/