javascript Reg Exp以匹配特定的域名

时间:2015-09-23 02:42:26

标签: javascript regex

我一直在尝试使用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}那样应该通过。

谢谢。

6 个答案:

答案 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(没有最终斜杠)。

示例:https://regex101.com/r/kT8lP2/1

答案 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。如果你有一个固定的字符串,那么就不需要通过检查模式来引入语义复杂性。

正则表达式最适合决定模式是否匹配。

例如,如果您的要求类似于域名应以exle结尾,并且在开始和结束之间,则应包含字母数字字符,其中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)

它会帮助你。 https://www.regextester.com/94044

答案 5 :(得分:0)

正如你所指出的那样,你只需要example.com(写域然后转义期间然后转换为com),所以在正则表达式中使用它。

Example

已更新

见下面的答案