如何在URL包含指定路径时用正则替换URL路径的最后部分?
解决方案
直接使用带条件匹配的正则表达式,结合捕获组实现需求:
function redactUrl(url) { return url.replace(/(\/ice\/flag\/.*?)\/[^\/?#]*(?=[?#]|$)/, '$1/redacted'); }
正则逻辑说明
(\/ice\/flag\/.*?): 捕获包含/ice/flag/的路径前缀,.*?采用非贪婪匹配,确保后续能定位到路径的最后一段\/[^\/?#]*: 匹配需要替换的目标路径段——从/开始,直到遇到?(查询参数)、#(哈希)或者URL结尾的部分(?=[?#]|$): 正向预查,确保匹配的是路径的最后一段,不会误替换中间的路径部分
测试验证
针对给出的所有场景,执行结果如下:
- 输入:
https://test.com/plants/ice/flag/237468372912873→ 输出:https://test.com/plants/ice/flag/redacted - 输入:
https://test.com/plants/extra/ice/flag/237468372912873→ 输出:https://test.com/plants/extra/ice/flag/redacted - 输入:
https://test.com/plants/ice/flag/extra/237468372912873→ 输出:https://test.com/plants/ice/flag/extra/redacted - 输入:
https://test.com/plants/ice/flag/extra/extra/237468372912873→ 输出:https://test.com/plants/ice/flag/extra/extra/redacted - 输入:
https://test.com/plants/ice/flag/extra/237468372912873?paramOne=1¶mTwo=2#someHash→ 输出:https://test.com/plants/ice/flag/extra/redacted?paramOne=1¶mTwo=2#someHash
对于不含/ice/flag/的URL(如https://test.com/plants/not_ice/flag/237468372912873),正则不会匹配,URL保持原样。
内容的提问来源于stack exchange,提问作者inhwrbp
相关产品推荐
相关产品推荐

