2016-01-21 40 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+)?/