如何从不同基础URL提取路径子串?现有方法返回空串求助
解决URL路径提取问题
你的代码之所以返回空字符串,核心问题出在第一个replace操作上:你用整个URL字符串作为正则匹配规则去替换原URL,这直接就把整个内容清空了,后面的replace自然得不到有效结果。
推荐方案:使用原生URL API(最可靠)
现代浏览器和Node.js都支持标准的URL对象,它能帮你轻松解析URL的各个部分,不用自己写复杂正则,还能处理各种边缘情况(比如带端口、查询参数的URL):
// 基于你的变量改写 const urlObj = new URL(renamedObj.context_page_url); renamedObj.context_page_path = urlObj.pathname;
比如对于https://abc.example.com/bla/bla/123/bla,urlObj.pathname会直接返回/bla/bla/123/bla,完美符合你的需求。
备选方案:正则表达式(兼容旧环境)
如果因为环境限制不能使用URL对象,可以用正则匹配并移除协议和域名部分:
renamedObj.context_page_path = renamedObj.context_page_url.replace(/^https?:\/\/[^\/]+/, '');
这个正则的含义:
^https?:\/\/匹配开头的http://或https://[^\/]+匹配从协议结束到第一个/之间的所有字符(也就是域名部分)- 把这两部分整体替换为空,剩下的就是你要的路径
为什么你的原代码不行?
再回头看你的代码:
renamedObj.context_page_path = renamedObj.context_page_url.replace(new RegExp(renamedObj.context_page_url, 'g'), '').replace('https://', '').replace('http://', '');
第一个replace用整个URL作为正则,相当于把整个字符串替换成空,后面的两个replace操作都是在空字符串上执行的,结果自然还是空。
内容的提问来源于stack exchange,提问作者Ryuuks
相关产品推荐
相关产品推荐

