url匹配及repalce方法

问题描述

获取 url 中的参数

  1. 指定参数名称,返回该参数的值 或者 空字符串
  2. 不指定参数名称,返回全部的参数对象 或者 {}
  3. 如果存在多个同名参数,则返回数组

我的解决方案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
function getUrlParam(sUrl, sKey) {
if(sKey){
var reg = new RegExp("[?&]"+sKey+"=([^&#])+","g")//[?&]sKey=([^&#]+)/g;
var res = sUrl.match(reg);
console.log(res)
if(!res) return "";
var r = res.map(function (t) {
console.log(t)
return (t.slice(t.indexOf("=")+1))
})
if(r.length===1) return r[0];
else return r;
}
else{
var reg = new RegExp("[?&]([^&#=])+=([^&#])+","g")//[?&]sKey=([^&#]+)/g;
var res = sUrl.match(reg);
var r = {}
res.forEach(function (t) {
console.log(t)
var index = t.indexOf("=");
if(r[t.slice(1,index)]){
var temp = r[t.slice(1,index)];
console.log(temp)
if(Array.isArray(r[t.slice(1,index)])){
r[t.slice(1,index)].push((t.slice(index+1)))
}
else{
var v = [temp,(t.slice(index+1))]
r[t.slice(1,index)] = v;
}
//r[t.slice(1,index)] = temp.split('').push(t.slice(index+1))
}
else
r[t.slice(1,index)] =(t.slice(index+1))
})
return r;
}
}

比较麻烦,讨论区有用到replace方法的,对此方法不太熟悉,因此先总结一下repalce用法

replace()用法

1.两个参数都是字符串,即普通意义上的替换
2.第一个参数是正则,第二个参数为字符串,则替换匹配到的字符串
3.第一个参数是正则,第二个参数是字符串包含捕获组,如$1,则是用捕获组替换匹配到的字符串
4.第一个参数是正则,第二个参数是函数,且第一个参数不包含子表达式

1
2
3
4
5
6
7
8
9
10
11
12
13
var text = 'cat, bat, sat, fat';
// 使用/at/g 匹配字符串中所有的at,并将其替换为ond,
// 函数的参数分别为:当前匹配的字符,当前匹配字符的位置,原始字符串
var result = text.replace(/(at)/g, function(match, pos, originalText) {
console.log(match + ' ' + pos+originalText);
return 'ond'
});
console.log(result);
//at 1cat, bat, sat, fat
//at 6cat, bat, sat, fat
//at 11cat, bat, sat, fat
//at 16cat, bat, sat, fat
//cond, bond, sond, fond

5.第一个参数是正则,第二个参数是函数,且第一个参数包含子表达式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var str5 = '这是一段原始文本,需要替换的内容"3=c这要替换4d"!';
var newStr = str5.replace( /([0-9])([a-z])/g,function (arg1,arg2,arg3,arg4,arg5){
// 当正则表达式中存在捕获组时,函数的参数一次为:模式匹配项,第一个捕获组的匹配项,第二个捕获组的匹配项...匹配项在字符串中的位置,原始字符串
console.log( arg1 );
console.log( arg2 );
console.log( arg3 );
console.log( arg4 );
console.log( arg5 );
} );
/*3c
3
c
17
这是一段原始文本,需要替换的内容"3c这要替换4d"!
4d
4
d
23
这是一段原始文本,需要替换的内容"3c这要替换4d"!*/