我正在尝试编写一个正则表达式(javascript/node.js),它可以从任何给定的URL中提取子域名和域名部分。以下是我得到的正则表达式:
[^(?:http:\/\/|www\.|https:\/\/)]([^\/]+)
目前,我只考虑http、https协议,并从URL的子域名+域名部分中排除"www."。我检查了表达式,它几乎可以工作。但是,这里有一个问题:
成功
'http://mplay.google.co.in/sadfask/asdkfals?dk=10'.match(/[^(?:http:\/\/|www\.|https:\/\/)]([^\/]+)/i)
'http://lplay.google.co.in/sadfask/asdkfals?dk=10'.match(/[^(?:http:\/\/|www\.|https:\/\/)]([^\/]+)/i)
失败
'http://play.google.co.in/sadfask/asdkfals?dk=10'.match(/[^(?:http:\/\/|www\.|https:\/\/)]([^\/]+)/i)
'http://tplay.google.co.in/sadfask/asdkfals?dk=10'.match(/[^(?:http:\/\/|www\.|https:\/\/)]([^\/]+)/i)
我只是使用结果数组中的第一个元素。我无法理解为什么 "play." 和 "tplay." 不起作用。请有人在这方面帮助我吗?
"/p" 和 "/t" 在正则表达式求值器中有任何含义吗?
是否有其他方法可以使用正则表达式从任何给定的 URL 中提取子域和域?
编辑 -
例子: https://play.google.com/store/apps/details?id=com.skgames.trafficracer => play.google.com https://mail.google.com/mail/u/0/#inbox => mail.google.com