Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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和正则表达式解析url?_Javascript_Regex_Url - Fatal编程技术网

如何使用Javascript和正则表达式解析url?

如何使用Javascript和正则表达式解析url?,javascript,regex,url,Javascript,Regex,Url,我想解析一些URL,其格式如下:- var url ="http://www.example.com/cooks/cooking-dress-wine/~no-order/pr?p%5B%5D=sort%3Dfeatured&sid=bks%2C43p&mycracker=ch_vn_clothing_subcategory_Puma&ref=b41c8097-8efe-4acf-8919-0fa81bcb590a" 它不是必要的域名和其他部分将是相同的所有网址的,他

我想解析一些URL,其格式如下:-

var url ="http://www.example.com/cooks/cooking-dress-wine/~no-order/pr?p%5B%5D=sort%3Dfeatured&sid=bks%2C43p&mycracker=ch_vn_clothing_subcategory_Puma&ref=b41c8097-8efe-4acf-8919-0fa81bcb590a" 
它不是必要的域名和其他部分将是相同的所有网址的,他们可以不同,即我在寻找一个通用的解决方案

基本上,我想去掉所有其他东西,只得到部分:

/cooks/cooking-dress-wine/~no-order/pr?p%5B%5D=sort%3Dfeatured&sid=bks%2C43p
我想用JavaScript和正则表达式来解析它

我是这样做的:

var mapObj = {"/^(http:\/\/)?.*?\//":"","(&mycracker.+)":"","(&ref.+)":""};
var re = new RegExp(Object.keys(mapObj).join("|"),"gi");
url = url.replace(re, function(matched){
  return mapObj[matched];
}); 
但它会退回这个

http://www.example.com/cooks/cooking-dress-wine/~no-order/pr?p%5B%5D=sort%3Dfeatured&sid=bks%2C43pundefined
我在哪里做了不正确的事情?还是有其他更简单的解决方案

var url ="http://www.example.com/cooks/cooking-dress-wine/~no-order/pr?p%5B%5D=sort%3Dfeatured&sid=bks%2C43p&mycracker=ch_vn_clothing_subcategory_Puma&ref=b41c8097-8efe-4acf-8919-0fa81bcb590a";
var newAddr = url.substr(22,url.length);
// newAddr == "/cooks/cooking-dress-wine/~no-order/pr?p%5B%5D=sort%3Dfeatured&sid=bks%2C43p&mycracker=ch_vn_clothing_subcategory_Puma&ref=b41c8097-8efe-4acf-8919-0fa81bcb590a"
22
是开始切片字符串的位置

url.length
是要包含多少内容

只要链接上的域名保持不变,这项功能就有效。

22
是开始切片字符串的位置

url.length
是要包含多少内容


只要链接上的域名保持不变,这种方法就有效。为什么不映射一个拆分数组呢

您不需要对URL进行正则化,但必须在循环中运行if语句来删除特定的GET参数。在这种特殊情况下(关键字特殊),您只需将子字符串添加到
索引
“&mycracker”


为什么不映射一个分割数组呢

您不需要对URL进行正则化,但必须在循环中运行if语句来删除特定的GET参数。在这种特殊情况下(关键字特殊),您只需将子字符串添加到
索引
“&mycracker”

您可以使用:

/(?:https?:\/\/[^\/]*)(\/.*?)(?=\&mycracker)/
代码:

var s="http://www.example.com/cooks/cooking-dress-wine/~no-order/pr?p%5B%5D=sort%3Dfeatured&sid=bks%2C43p&mycracker=ch_vn_clothing_subcategory_Puma&ref=b41c8097-8efe-4acf-8919-0fa81bcb590a";
var ss=/(?:https?:\/\/[^\/]*)(\/.*?)(?=\&mycracker)/;
console.log(s.match(ss)[1]);

说明:

var s="http://www.example.com/cooks/cooking-dress-wine/~no-order/pr?p%5B%5D=sort%3Dfeatured&sid=bks%2C43p&mycracker=ch_vn_clothing_subcategory_Puma&ref=b41c8097-8efe-4acf-8919-0fa81bcb590a";
var ss=/(?:https?:\/\/[^\/]*)(\/.*?)(?=\&mycracker)/;
console.log(s.match(ss)[1]);
您可以使用:

/(?:https?:\/\/[^\/]*)(\/.*?)(?=\&mycracker)/
代码:

var s="http://www.example.com/cooks/cooking-dress-wine/~no-order/pr?p%5B%5D=sort%3Dfeatured&sid=bks%2C43p&mycracker=ch_vn_clothing_subcategory_Puma&ref=b41c8097-8efe-4acf-8919-0fa81bcb590a";
var ss=/(?:https?:\/\/[^\/]*)(\/.*?)(?=\&mycracker)/;
console.log(s.match(ss)[1]);

说明:

var s="http://www.example.com/cooks/cooking-dress-wine/~no-order/pr?p%5B%5D=sort%3Dfeatured&sid=bks%2C43p&mycracker=ch_vn_clothing_subcategory_Puma&ref=b41c8097-8efe-4acf-8919-0fa81bcb590a";
var ss=/(?:https?:\/\/[^\/]*)(\/.*?)(?=\&mycracker)/;
console.log(s.match(ss)[1]);

稍微更改以下代码,您可以检索任何参数:

var url = "http://www.example.com/cooks/cooking-dress-wine/~no-order/pr?p%5B%5D=sort%3Dfeatured&sid=bks%2C43p&mycracker=ch_vn_clothing_subcategory_Puma&ref=b41c8097-8efe-4acf-8919-0fa81bcb590a"
var re = new RegExp(/http:\/\/[^?]+/);
var part1 = url.match(re);
var remain = url.replace(re, '');
//alert('Part1: ' + part1);
var rf = remain.split('&');
// alert('Part2: ' + rf);
var part2 = '';
for (var i = 0; i < rf.length; i++) 
    if (rf[i].match(/(p%5B%5D|sid)=/))
        part2 += rf[i] + '&';
part2 = part2.replace(/&$/, '');
//alert(part2)
url = part1 + part2;
alert(url);
var url=”http://www.example.com/cooks/cooking-dress-wine/~no order/pr?p%5B%5D=sort%3Dfeatured&sid=bks%2C43p&mycracker=ch_vn_clothing_subcategory_Puma&ref=b41c8097-8efe-4acf-8919-0fa81bcb590a“
var re=new RegExp(/http:\/\/[^?]+/);
var part1=url.match(re);
var reside=url.replace(re',);
//警报(“第1部分:”+第1部分);
var rf=剩余分割(“&”);
//警报(“第2部分:”+rf);
var第2部分=“”;
对于(变量i=0;i
稍微更改以下代码,您可以检索任何参数:

var url = "http://www.example.com/cooks/cooking-dress-wine/~no-order/pr?p%5B%5D=sort%3Dfeatured&sid=bks%2C43p&mycracker=ch_vn_clothing_subcategory_Puma&ref=b41c8097-8efe-4acf-8919-0fa81bcb590a"
var re = new RegExp(/http:\/\/[^?]+/);
var part1 = url.match(re);
var remain = url.replace(re, '');
//alert('Part1: ' + part1);
var rf = remain.split('&');
// alert('Part2: ' + rf);
var part2 = '';
for (var i = 0; i < rf.length; i++) 
    if (rf[i].match(/(p%5B%5D|sid)=/))
        part2 += rf[i] + '&';
part2 = part2.replace(/&$/, '');
//alert(part2)
url = part1 + part2;
alert(url);
var url=”http://www.example.com/cooks/cooking-dress-wine/~no order/pr?p%5B%5D=sort%3Dfeatured&sid=bks%2C43p&mycracker=ch_vn_clothing_subcategory_Puma&ref=b41c8097-8efe-4acf-8919-0fa81bcb590a“
var re=new RegExp(/http:\/\/[^?]+/);
var part1=url.match(re);
var reside=url.replace(re',);
//警报(“第1部分:”+第1部分);
var rf=剩余分割(“&”);
//警报(“第2部分:”+rf);
var第2部分=“”;
对于(变量i=0;i
但我还是想摆脱&mycracker=ch_vn_clothing\u subcategory\u Puma&ref=b41c8097-8efe-4acf-8919-0fa81bcb590a和我上面的url只是一个指示性url,我希望在所有场景中都使用相同的脚本。但我仍然希望摆脱&mycracker=ch_vn_clothing_subcategory_Puma&ref=b41c8097-8efe-4acf-8919-0fa81bcb590a,我上面的url只是一个指示性url,我希望在所有场景中都使用相同的脚本。但我仍然希望摆脱&mycracker=ch_vn_clothing_subcategory_Puma&ref=b41c8097-8efe-4acf-8919-0fa81bcb5‌​90a和我上面的url只是一个指示性的url,我想在所有场景中使用相同的脚本来截断“&mycracker”索引处的url,并且url与您想要的url匹配。但我仍然想摆脱&mycracker=Chu vn_clothing_subcategory_Puma&ref=b41c8097-8efe-4acf-8919-0fa81bcb5‌​90a和我上面的url只是一个指示性的url,我想在所有场景中使用相同的脚本来截断“&mycracker”索引处的url,并且url与您想要的url匹配。如果没有cook这个词,解决方案是什么?我的意思是,我构建这个url只是为了让大家了解我所面临的问题。是的,这似乎很好。是的,杰森,我也喜欢它。如果没有库克这个词,解决方案是什么?我的意思是,我构建这个url只是为了让大家了解我所面临的问题。是的,这看起来不错。是的,杰森,我也喜欢它。