移除URL中的令牌化字符串:我的代码存在哪些疏漏?
你的代码存在这几个关键问题:
RegExp构造函数使用错误:
用new RegExp()创建正则时,不需要加首尾的/分隔符,而且字符串里的转义字符\必须写成\\——你原来的代码里\d会被解析成普通字符d,导致正则根本匹配不了数字,实际变成了匹配/(?:d+[a-z]|[a-z]+d)[a-z d]*,完全不符合预期。replace方法参数错误:
你在replace里传的是字符串"/(?:\d+[a-z]|[a-z]+\d)[a-z\d]*",而不是正则表达式。字符串形式的替换只会查找完全一致的文本,URL里根本没有这段内容,自然替换失败。必须用正则字面量或者new RegExp创建的正则对象作为替换参数。正则匹配逻辑的瑕疵:
你要匹配的是路径中单独一段的数字字母混合序列,最好加上路径分隔符的限制,避免误匹配其他合法路径段。比如确保匹配的是/开头的混合序列,避免把正常路径里的数字字母组合误删。
修正后的代码示例:
function removeToken() { let tokenUrl = "https://www.example.com/pathone/pathtwo/8943d932fee15d8be922d1f51f68c0bf3f929824fd48cda8299144861d214c3e/summary"; // 用正则字面量更直观,匹配/开头的数字字母混合段,加i忽略大小写(可选) let regex = /\/[a-z\d]*(\d[a-z]|[a-z]\d)[a-z\d]*/i; tokenUrl = tokenUrl.replace(regex, ''); return tokenUrl; // 返回结果:https://www.example.com/pathone/pathtwo/summary }
或者用RegExp构造函数的写法:
function removeToken() { let tokenUrl = "https://www.example.com/pathone/pathtwo/8943d932fee15d8be922d1f51f68c0bf3f929824fd48cda8299144861d214c3e/summary"; let regex = new RegExp("\\/[a-z\\d]*(\\d[a-z]|[a-z]\\d)[a-z\\d]*", "i"); tokenUrl = tokenUrl.replace(regex, ''); return tokenUrl; }
内容的提问来源于stack exchange,提问作者xmunchaser
相关产品推荐
相关产品推荐

