Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 要匹配简单域的正则表达式_Regex_Pattern Matching - Fatal编程技术网

Regex 要匹配简单域的正则表达式

Regex 要匹配简单域的正则表达式,regex,pattern-matching,Regex,Pattern Matching,我正在尝试匹配一个简单的域:example.com 但是它的所有组合 我将如何做到这一点以涵盖: https://example.com http://www.example.com etc. https://example.com http://www.example.com 等 使用代码: var result = /^https?:\/\/([a-zA-Z\d-]+\.){0,}example\.com$/.test('https://example.com'); // result is

我正在尝试匹配一个简单的域:example.com

但是它的所有组合

我将如何做到这一点以涵盖:

https://example.com http://www.example.com etc. https://example.com http://www.example.com 等 使用代码:

var result = /^https?:\/\/([a-zA-Z\d-]+\.){0,}example\.com$/.test('https://example.com');
// result is either true of false

我对它进行了改进,使之与http://a.b.example.com“

您可能可以使用它来匹配URL的域名部分:

/^(?:https?:\/\/)?(?:[^.]+\.)?example\.com(\/.*)?$
它将匹配以下任何字符串:

https://example.com
http://www.example.com
http://example.com
https://example.com
www.example.com
example.com

 

正则表达式详细信息:

  • ^
    :开始
  • (?:https?:\/\/)?
    :匹配
    http://
    https://
  • (?:[^.]+\)?
    :可选择匹配文本,直到下一个点和下一个点
  • example\.com
    :匹配
    example.com
  • (\/.*)
    :可选地匹配
    /
    ,后跟0个或更多字符
  • $
    :结束

    • 我使用了一个更一般的例子:

      /http(?:s)?:\/\/(?:[\w-]+\.)*([\w-]{1,63})(?:\.(?:\w{3}|\w{2}))(?:$|\/)/i
      
      请注意,此解决方案没有为5个字符的TLD选择正确的标签。例如:

      http://mylabel.co.uk
      
      会被选为“co”而不是“mylabel”,但是

      http://mylabel.co
      
      将正确匹配为“mylabel”。即使有这个限制,正则表达式对我来说也足够好了


      请注意,标签的63个字符限制是RFC规范。希望这有助于将来寻找相同答案的人。

      以下内容在Java中适用:

      ^(http:| https:|)[/][/]([^/]+[.])*example.com$

      并匹配您的测试用例,不匹配


      这将正确匹配以下任何变体的URL,以及.com之后的任何内容

      https://example.com
      https://www.example.com
      http://www.example.com
      http://example.com
      https://example.com
      www.example.com
      example.com
      
      结果将为真或假

      const result = /^(http(s)?(:\/\/))?(www\.)?example\.com(\/.*)?$/.test(value); 
      

      下面的exp与第一部分中的http/htpps/ftp匹配,尽管它也可以匹配随机的5个字母的单词,如ahfzc,但这种情况很少发生,exp的后面部分会忽略它们

      第二部分匹配ww/ww,最后一部分匹配任何以“.”分隔的字母数字。最后一部分匹配任意3个字符,如.com、.in、.org等

      试试这个

      r'[a-z0-9]{0,5}[\:\/]+[w]{0,3}[\.]+[a-z0-9\-]+[\.]+[a-z0-9]{0,3}'
      

      您可能需要调整该角色类。并非所有的
      \w
      在域名中都是有效的(特别是
      \u
      ),并且允许连字符。@itea-谢谢-但是你能为我添加javascript转义吗?@itea再次感谢你的帮助-但我仍然有问题。请参阅@Andy,因为$match是字符串/行的结尾,所以只需删除它即可。使用这个:if(/^(?:http(?:s)?:\/\/)(?:[^\.]+\)?jsfiddle\.net/.test(window.location.href)){alert('works');}//这似乎在jsfiddle中不起作用,但在chrome javascript控制台中起作用。您好!虽然这段代码可能会解决这个问题,包括如何以及为什么解决这个问题的解释将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请编辑您的答案,添加解释,并说明适用的限制和假设。如果已经回答了问题,那么应该在评论中写一个指向SO帖子的链接,或者将帖子作为副本报告,而不是重新回答SO,以使其按设计发挥作用。您必须使用单个正则表达式吗?使用现有的URL解析器,然后分别查看各个部分,这样不太容易出错。@muistooshort最初我有
      /^https?:\/\/.*?。\facebook\.com\/
      ,但我认为它可能无法在所有情况下工作?这会让一些无效的URL通过(例如
      http://a_b.facebook.com/
      )但那可能不是问题。你试过什么?你有哪些问题值得尝试。这不是一个教程网站,也不是一个免费的代码编写服务。请阅读,然后编辑您的Q,使其符合Q类型,以便能够处理。实际上,它是有效的,请参见:您试图匹配
      location.href
      ,它是
      http://fiddle.jshell.net/_display/
      。正如我在上面写的,正则表达式是用于匹配域名的,而不是完整的URL。您好!虽然这段代码可能会解决这个问题,包括如何以及为什么解决这个问题的解释将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请编辑您的答案,添加解释,并说明适用的限制和假设。如果已经回答了问题,那么应该在评论中写一个指向SO帖子的链接,或者将该帖子作为副本报告,而不是重新回答SO作为设计的非常有效的点@SherylHohman,并对我发布此帖子时没有添加解释表示歉意。我现在在回答中添加了一个工作演示和解释。谢谢你好虽然这段代码可能会解决这个问题,包括如何以及为什么解决这个问题的解释将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请编辑您的答案,添加解释,并说明适用的限制和假设。如果已经回答了问题,那么应该在评论中写一个指向SO帖子的链接,或者将帖子作为副本报告,而不是重新回答SO,以使其按设计工作。您的正则表达式匹配
      :/:/:/…-…
      ,而不是有效域。但是它与有效的
      stackoverflow.com
      example.enterprise
      不匹配。正确的,我们可以使用它来包括stackoverflow.com
      domain\u exp=r'[a-z0-9]{0,5}[\:\/]?[w]{0,3}[\.]?[a-z0-9\-]+[\.]+[a-z0 9]{0,3}'
      但这会使它过于通用,并且包含大量误报。你将不得不根据你得到的数据类型调整你的解决方案,因为我相信你不能用re获得100%的准确度。在我的情况下,上述方法效果最好。
      r'[a-z0-9]{0,5}[\:\/]+[w]{0,3}[\.]+[a-z0-9\-]+[\.]+[a-z0-9]{0,3}'