获取地址参数或者获取某一个字符串里面的序列化参数,那么正则表达式就是比较好的一个获取方式,精简方便,前提需要对正则表达式的语法进行简单了解
1、假如字符串如下
"http://www.test.com/gp/product/B09BNH4ZMV/ref=ox_sc_act_title_3?smid=A3G474Z3NV2OPA&psc=1"
2、普通逻辑算法方式匹配
使用if、for、split()进行匹配
- 代码
function getUrlParam(str, name) {
var value = '';
var a_arr = str.split('?');
if (a_arr.length > 1) {
b_arr = a_arr[1].split('&')
if (b_arr.length > 0) {
for (var i = 0; i < b_arr.length; i++) {
var c_arr = b_arr[i].split('=');
if (c_arr.length > 1) {
var _name = c_arr[0];
var _value = c_arr[0];
if (name == _name) {
value = _value;
}
}
}
}
}
return value;
}
- 效果
3、正则表达式实现
- 表达式
"http://www.test.com/gp/product/B09BNH4ZMV/ref=ox_sc_act_title_3?smid=A3G474Z3NV2OPA&psc=1".match("smid=[^&]+")
1)匹配输入字符串的开始位置:^
2)匹配方括号里的字符:[]
3)匹配前面的子表达式一次或多次:+
4)smid=[^&]+:匹配固定值smid=之后的值,到固定值&符号结束
5)匹配出来的值,就是第一次出现smid=和第一次出现&之间的值,加上固定值本身
6)最后结合split('=')方法进行匹配
- 代码
var str="http://www.test.com/gp/product/B09BNH4ZMV/ref=ox_sc_act_title_3?smid=A3G474Z3NV2OPA&psc=1";
var arr=str.match("smid=[^&]+");
if(arr!=null&&arr.length>0){
var _arr=arr[0].split('=');
if(_arr.length>1){
var value=_arr[1];
}
}