我这边暂时想到两个方法 :
方法一 是将得到的字符串分成数组 再循环取值
方法二 正则 (前提是要取的那个字段是唯一且无重复)
例子:
data() {
return {
activeName: "1"
};
},
props: {
fd: {
type: Object,
default() {
return {
selectDataSource: "?type=xx&active=11&id=9&acactive=2",
};
},
},
},
题目: 我要从 selectDataSource 中拿到 active 后面的值
答:
方案一: 通过split切割成数组 再循环筛选要的值
var s = this.fd.selectDataSource;
var ss = s.split('&') //根据'&'将s分割成一个数组ss
console.log('ss: ', ss); //输出 ["?type=xx", "active=11", "id=9", "acactive=2"]
for (let i=0;i<ss.length;i++) { //对ss做循环
if(ss[i].includes('active')) { //筛选出包含 'active' 字段的
var ss1 = ss[i]; //将包含'active'字段的赋值给ss1
console.log('ss1: ', ss1); //输出 ss1:active=11 ss1:acactive=2
//要得到active=1里面的数字,所以裁切ss1并数字化Number().
//如果是sctive得到的就是数字 如果是acactive得到的是NaN
var ss2 = Number(ss1.substring(7, ss1.length))
if (!isNaN(ss2)) { //判断是否不是NaN类型的 如果不是 则是我们要的结果 输出ss2
console.log('ss2: ', ss2);
}
}
}
方案二: 通过正则 这里active和acactive两个字段正则不能分辨 暂时行不通
//var s = this.fd.selectDataSource;
var s = '?type=xx&active=11&id=9'; //如果s中只有 active 那正则是没有问题的
var ss = s.match(/\?(.*)active=(\d+)(.*)/);
console.log('ss: ', ss);
if (ss != null) { //如果s='' 那正则取值后的ss=null 所以这里做非空判断
var ss1 = ss[2]
console.log('ss1: ', ss1);
}