第 105 题:编程题 匹配查找特定字符串
url 有三种情况
https://www.xx.cn/api?keyword=&level1=&local_batch_id=&elective=&local_province_id=33 https://www.xx.cn/api?keyword=&level1=&local_batch_id=&elective=800&local_province_id=33 https://www.xx.cn/api?keyword=&level1=&local_batch_id=&elective=800,700&local_province_id=33
匹配 elective 后的数字输出(写出你认为的最优解法):
[] || ['800'] || ['800','700']
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(28)
正则里写的是啥意思啊,好炫,看不懂
这么写好搓啊,高级的不会,哈哈哈
有没有大佬解释下第一位给的正则啊?看不懂呀
用Url对象是开挂了。其实还可以创建a标签直接搞,也是类似Url对象的效果。用原始的正则也很简单
https://www.xx.cn/api?keyword=&level1=&local_batch_id=&elective=700,800&local_province_id=33
var getParams=function(url,{data='elective'}={}){
let params = url.split(data+'=')[1];
if(params == undefined) return undefined;
let val = params.split('&')[0];
return val==''?[]:val.split(',');
}
function getword(url,word){
var test =new RegExp(word+'=([^&]*)(&|$)');
var ele = url.match(test)[1];
return ele?ele.split(","):[];
}
啥是大厂,没进去过。可能有以下需求:
1.可以扩展换url,换字段;
2.要快;
3.还得防止各种报错
这个很厉害,有又学到一招
这个正则表达式
这个正则表达式<=是零宽度断言的写法,断言
elective=
有无内容,是匹配elective=
的字符的const getUrlValue = (url, key) => {
const reg = new RegExp(
(?<=${key}=)([^&]*)(?=&)
);const result = url.match(reg);
return result ? result[1] : result;
}
get了,URLSearchParams这个API是好API
IE浏览器不支持呀
function trans(str){
let arr = str.split("?")[1].split("&");
for(let i = 0 ; i< arr.length; i++){
if(arr[i].split("=")[0]==="elective"){
target = arr[i].split("=")[1];
}
}
return target.split(",");
}
可惜啊,大部分公司要兼容到ie11
模仿第一位大佬的做法
var getUrlValue = function (urls) {
if (!urls) return;
let tempRes = /(?<=elective=)(d+(.d)*)/g.exec(urls);
return tempRes ? tempRes[0].split(',') : []
}
棒
const urls = [
"https://www.xx.cn/api?keyword=&level1=&local_batch_id=&elective=&local_province_id=33",
"https://www.xx.cn/api?keyword=&level1=&local_batch_id=&elective=800&local_province_id=33",
"https://www.xx.cn/api?keyword=&level1=&local_batch_id=&elective=800,700&local_province_id=33",
];
urls.forEach(url => {
console.log(new URLSearchParams(url).get('elective').split(','));
});
new URL
("https://www.xx.cn/api?keyword=&level1=&local_batch_id=&elective=700,800&local_province_id=33")
.searchParams.get("elective")
.split(",")
.filter(e=>e)
.map(e=>e)
考虑到是大厂级别的前端要求,有这么几点:
1,elective是跟在一堆空值后面,所以要效率最高的排除掉前面的匹配。
2,在匹配完elective的值之后,&后面的匹配就需要立刻停止,停止性能消耗
3,第三个的值中带了逗号,也要考虑其他符号的可能性。