【问题标题】:Regex to detect urls with '?' character at the end正则表达式检测带有“?”的网址最后的字符
【发布时间】:2013-08-22 13:47:49
【问题描述】:

我找到了很多解决方案,但没有一个对我有用。

假设,例如,我想查找以 www. 开头并以空格或 ? 结尾的 URL。在这种情况下,我的意思是它以 ? 结尾,而不是一定是与 CGI 相关的 URL。

我正在尝试使用正则表达式

var r = /(^|[\s\?])(www\..+?(?=([\s]|\?|($))))/g;

我的示例使用:http://jsfiddle.net/DKNat/2/

如何在正则表达式中使用\? 来防止在? 之前包含/ 的URL 结束?

http://jsfiddle.net/DKNat/11/

我无法在 url 末尾用 DOT 解决最后一个问题。 任何身体都可以帮忙吗?

【问题讨论】:

  • 我不知道问题是什么。您是否想检测一个在某处包含? 的域名,只要它不是/?
  • 应该不应该返回 true 的示例在这里会有所帮助。
  • 是的,字符串 'www.domain.com?www.domeain.net' 包含 2 个网址,是吗?下一个字符串 'www.domain.com/cgi/script.pl?www.domeain.net' 包含一个带有 cgi 参数的 url
  • 所以,第一个字符串替换为 www.domain.com?www.domeain.net

标签: javascript regex


【解决方案1】:

在你的小提琴中试试这个:

var r = /(^|\??)(www\.[^\?]+)/g;

我在这里更新了你的小提琴:

http://jsfiddle.net/DKNat/3/

更新:

我明白你现在想要做什么。不幸的是,除了/ 之外,您的两个字符串基本上是相同的,所以除非您希望您的正则表达式假设斜线后的任何位置的? 表示CGI 调用,否则您无能为力.但你可以试试这个:

var r = /(^|\??)(www\.[^\?]+\/[^\/]+\?[^\?]+|www\.[^\?]+)/g;

更新小提琴:

http://jsfiddle.net/DKNat/5/

更新 2: 确定要求后,这是我添加到 fiddle 10 中的最终 RegExp:

var r = /(^|[\?\s])(www\.[^\? ]+\/[^\/ ]*\?[^\? ]+|www\.[^\? ]+)/g;

【讨论】:

  • 我在哪里取消注释字符串?作为cgi
  • 他们使用 TLD 列表来检测域结束,然后他们搜索空间或其他非逻辑字符以找到真正的 url 结束
  • 你期待什么?
  • ' 和带有 www.domain.net 的文本' 分开。但它与 cgi 一样长的网址
  • 和 www.domain.net 最后也标记为 (A)
猜你喜欢
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-18
  • 2019-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多