我一直在尝试使用Reg Exp来匹配具有特定域名的URL。
所以,如果我想检查这个网址是否来自example.com 什么reg exp应该是最好的?
此reg exp应与以下类型的URL匹配:
http://api.example.com/...
http://preview.example.com/...
http://www.example.com/...
http://purhcase.example.com/...
只需简单的规则,就像http://{something}.example.com/{something}
那样应该通过。
谢谢。
答案 0 :(得分:11)
我认为这是您正在寻找的内容:(https?:\/\/(.+?\.)?example\.com(\/[A-Za-z0-9\-\._~:\/\?#\[\]@!$&'\(\)\*\+,;\=]*)?)
。
分解如下:
https?:\/\/
匹配http://
或https://
(您没有提及https
,但这似乎是一个好主意。)(.+?\.)?
匹配第一个点之前的任何内容(我将其设为可选,以便例如找到http://example.com/
example\.com
(当然example.com
); (\/[A-Za-z0-9\-\._~:\/\?#\[\]@!$&'\(\)\*\+,;\=]*)?)
:一个斜杠后跟一个URL中的每个可接受的字符;我将此选项设为可选,以便找到http://example.com
(没有最终斜杠)。答案 1 :(得分:2)
使用indexOf
javascript API。 :)
var url = 'http://api.example.com/api/url';
var testUrl = 'example.com';
if(url.indexOf(testUrl) !== -1) {
console.log('URL passed the test');
} else{
console.log('URL failed the test');
}
编辑:
为何使用indexOf
代替Regular Expression
。
你知道,你在这里匹配的是一个简单的字符串(example.com)而不是pattern
。如果你有一个固定的字符串,那么就不需要通过检查模式来引入语义复杂性。
正则表达式最适合决定模式是否匹配。
例如,如果您的要求类似于域名应以ex
以le
结尾,并且在开始和结束之间,则应包含字母数字字符,其中4个字符必须为大写。这是正则表达式证明有用的用例。
你有一个简单的问题,因此没有必要雇用1000名天使的军队来说服爱你的人。 ;)
答案 2 :(得分:1)
不确定这是否适用于您的情况,但依靠内置的URL解析器而不是使用正则表达式可能会更好。
var url = document.createElement('a');
url.href = "http://www.example.com/thing";
然后,您可以使用API给出的那些值来调用这些值
url.protocol // (http:)
url.host // (www.example.com)
url.pathname // (/thing)
如果这对您没有帮助,那么这样的事情可能有效,但可能太脆弱了:
var url = "http://www.example.com/thing";
var matches = url.match(/:\/\/(.[^\/]+)(.*)/);
// matches would return something like
// ["://example.com/thing", "example.com", "/thing"]
这些帖子也有帮助:
https://stackoverflow.com/a/3213643/4954530
https://stackoverflow.com/a/6168370
祝你好运!
答案 3 :(得分:1)
在某些情况下,您要查找的域名实际上可以在查询部分找到,但不能在域名部分找到:https://www.google.com/q=www.example.com
This answer会更好地对待这个案例 请参阅regex101上的this example。
答案 4 :(得分:1)
使用此:
/^[a-zA-Z0-9_.+-]+@(?:(?:[a-zA-Z0-9-]+\.)?[a-zA-Z]+\.)?
(domain|domain2)\.com$/g
匹配您选择的特定域。
如果您只想匹配一个域,请从|domain2
部分删除(domain|domain2)
。
答案 5 :(得分:0)