正则表达式匹配不同类型的http类型字符串

时间:2016-03-17 23:44:48

标签: javascript regex linux

在文本文件中,有一个字符串编码与http相关的信息。以下是字符串示例

URL 123.34.45.7:http://captive.apple.com/hotspot-detect.html

URL 123.45.67.8:http://www.google-analytics.com/r/collect?v=1&_v=j41&a=1071188231&t=pageview&_s=1&dl=http%3A%2F%2Fm.sherdog.com%2F&ul=en-us&de=UTF-8&dt=Sherdog.com%3A%20UFC%2C%20Mixed%20Martial%20Arts%20(MMA)%20News%2C%20Results%2C%20Fighting&sd=32-bit&sr=320x480&vp=320x460&je=0&_utma=236548035.1293902652.1385044241.1442

我写了一些正则表达式来提取部分直到http,例如

url)\\s\\d+[.]\\d+[.]\\d+[.]\\d+[:](http|https|ftp)

但我不确定如何编写正则表达式以匹配http之后的部分。感谢。

3 个答案:

答案 0 :(得分:0)

尝试以下正则表达式:

/^(URL[^:]+:)(?:.*?\/\/)(.*)/gm

演示:

var re = /^(URL[^:]+:)(?:.*?\/\/)(.*)/gm; 
var str = 'URL 123.34.45.7:http://captive.apple.com/hotspot-detect.html';
var m;

while ((m = re.exec(str)) !== null) {
    console.log(m[1]+m[2]);
}

它将打印:

URL 123.34.45.7:captive.apple.com/hotspot-detect.html

答案 1 :(得分:0)

用于查找类型" URL [IP ADDRESS]:[URL]"在给定(可能很大)的字符串中,试试这个:

var patterns = {
   ip: '\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}',
   url: (() => {
      var protocol = '(http(s)?(:\/\/))?(www\.)?';
      var domains = '[a-zA-Z0-9-_\.]+';
      var params = '([-a-zA-Z0-9:%_\+.~#?&//=]*)';
      return protocol + domains + params;
   })()
}

var regex = new RegExp(`URL ${patterns.ip}:${patterns.url}`);

看看这个小提琴:enter link description here

答案 2 :(得分:0)

.*会随时匹配任何字符。

因此,如果您将其添加到字符串的末尾,您将获得:

url\s\d+[.]\d+[.]\d+[.]\d+[:](http|https|ftp).*

这将匹配到行尾。

请注意,为了便于阅读,我已将\\转义为\。你可能需要重新逃脱它们。

Here's an example of that regular expression at work