Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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
Javascript 正则表达式以包含所有特定模式并仅排除一种情况_Javascript_Regex - Fatal编程技术网

Javascript 正则表达式以包含所有特定模式并仅排除一种情况

Javascript 正则表达式以包含所有特定模式并仅排除一种情况,javascript,regex,Javascript,Regex,我正在努力排除一些URL 我希望所有URL的模式都是/google.com/,除了/login.google.com/ 因此: account.google.com应该通过 google.com应该通过 google.com/abc应该通过 http://google.com应该通过 login.google.com不应通过 我正在尝试的代码是 /^(?!login\.)google\.com/ /^(登录)谷歌\.com/ 但两者都不起作用。我遗漏了什么吗?尝试此模式以匹配问题中列出的数

我正在努力排除一些URL

我希望所有URL的模式都是
/google.com/
,除了
/login.google.com/

因此:

  • account.google.com
    应该通过
  • google.com
    应该通过
  • google.com/abc
    应该通过
  • http://google.com
    应该通过
  • login.google.com
    不应通过
我正在尝试的代码是

/^(?!login\.)google\.com/
/^(登录)谷歌\.com/

但两者都不起作用。我遗漏了什么吗?

尝试此模式以匹配问题中列出的数据:

/^(account\.)?google\.com/

假设您试图匹配任何
google.com
地址,但以
登录名开头的地址除外。
,则只需在
谷歌
之前添加一个
*
,即

/^(https?:\/\/)(?!login\)([\w-]+\)?谷歌\.com/

更新:根据有用的评论进行修改。不确定有效的域名字符类是什么-猜测是
[\w-]
。看看你是否想玩它。

这个正则表达式应该适合你:

^(?:https?://)?(?!login\.)(?:.+?\.)?google\.com(?:/.*|)$
现场演示: Javascript语法:

/^(?:https?:\/\/)?(?!login\.)(?:.+?\.)?google\.com(?:\/.*|)$/

你从中得到了什么结果?你最初把它标记为JavaScript,你的问题看起来是“JavaScript ey”,但现在你添加了Java。这些是非常不同的语言。你是指一种而不是另一种(我猜只是JS),还是两种语言都需要这个?另外,
计算机科学
标签对于这个问题来说太宽泛了。它应该是javascript,我正在删除它。问题是你对
^
的理解。
^
后面的查找将永远不会匹配(多行模式下除外)。你明白为什么了吗?是的,你应该在
谷歌
部分前面加上一个可选的
,例如
(.*\)?
,以防止匹配
fakegoogle.com
等。否则,+1。@Brian-谢谢。已更新。您已合并Brian的修复,但这会导致
http://google.com
要断开。你想要。@RoryO'Kane、anubhava和Brian(再一次)-谢谢你们大家。希望我做对了。如果允许您“拆分”代表点,我会在这一点上这样做。@Zeta问题没有提到匹配URL的协议部分,只是一个主机/域名。(事实上,该问题经过编辑后添加了:-/)@ajp15243,说明中未指出该问题。@dsh虽然您更改了措辞,以准确反映您的答案仅适用于问题中的示例,声明试图明确排除
登录。
表明OP可能会尝试匹配除
login.google.com
之外的任何内容,而不是仅列出示例,而不做其他操作。尽管如此,OP在这一点上还是应该很清楚的,因为询问者使用的是JavaScript,所以最好使用使用使用JavaScript正则表达式引擎的正则表达式测试工具。上有各种语言的工具列表。谢天谢地,你的正则表达式。@RoryO'Kane:这一点很好,虽然我在正则表达式中没有使用任何特定于语言的功能,但我会记住这一点。由于OP使用前斜杠来定义正则表达式,所以你可能想避开上面代码片段中的前斜杠,就像你在Rubular示例中所做的那样。