带有URL的棘手正则表达式

时间:2009-08-16 19:54:54

标签: regex url

我想“修复”所有这些网址,以便所有以下网址都有效(所有网址都来自网域“example.com”:

之前:

httpprache.htm
tech-z.htm
bla/blubbb.html
/suchen/bildung/schulen/abend.htm
/suchen/bildung/schulen/beruf.htm
www.google.de
http://www.google.com/asdf.html
https://blabla.com/

后:

http://example.com/httpprache.htm
http://example.com/tech-z.htm
http://example.com/bla/blubbb.html
http://example.com//suchen/bildung/schulen/abend.htm
http://example.com//suchen/bildung/schulen/beruf.htm
http://www.google.de
http://www.google.com/asdf.html
https://blabla.com/

如何使用一个或多个正则表达式执行此操作?

3 个答案:

答案 0 :(得分:2)

为了让我们帮助您完成此任务,您必须更加准确地确定何时应将其修复到域example.com以及何时仅将URL更正为其他域。正如我现在看到的那样,你可以简单地检查一下www,http或https“(www | http | https)”是否在网址中。如果它们都不是,则可以在字符串前加上“http://example.com/”。

如果'www'在字符串中而'http'不在,则可以在字符串的开头添加'http://'。

这是多么严重,从你提供的几个例子中扣除,可能还有数千个其他案例需要注意,证明这可能会变成一项非常精细的任务。

答案 1 :(得分:2)

使用sed风格的正则表达式:

cat file-with-urls | sed's / ^(www。[^。] +。[az] + $)/ http:// \ 1 /'| sed'/ ^ https \?:///!s / ^ / http:// example.com //'

第一名:

如果字符串以“www。”开头,一系列字母,一个点,然后是一个或多个字母,请在前面添加http://

第二个:

如果字符串不以http://或https://开头,请将http://example.com/放在前面

答案 2 :(得分:0)

这段代码可以帮助您:

var fields = url.match( /(.*)[:/]{3}([^:/]+)[:]?([^/]*)([^?]*)[?]?(.*)/ );
if(fields === null){
    throw new Error('bar url param');
}
var protocol = fields[1];
var host = fields[2];
var port = fields[3];
var path = fields[4];
var query = fields[5];

然后你可以根据需要编写网址。