为何字符串.includes()无法匹配小写?如何兼容URL大小写关键词
解决URL中recordId/recordid大小写兼容检测问题
核心问题分析
原代码用String.includes()做关键词检测,以及正则匹配参数名时都是区分大小写的,导致小写recordid无法被识别。要实现大小写兼容,需要从关键词检测和参数提取两个环节修改:
修改方案及代码
- 替换区分大小写的
includes方法,改用带忽略大小写标志的正则检测 - 给参数提取的正则添加
i标志,确保匹配参数名时不区分大小写 - 顺便修正方法名的拼写错误(原
_geRecordId应为_getRecordId)
修改后的完整代码:
if(url && /recordId/i.test(url) && /rt/i.test(url)){ this._getRecordId(url); } private async _getRecordId(url){ const linkedId = this._getURLValue('recordId', url); if(!linkedId){ return; } // 这里可以添加拿到recordId后的业务逻辑 } private _getURLValue(name, url) { if (!url) url = location.href; name = name.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]"); var regexS = "[\\;]"+name+"=([^;]*)"; // 加入'i'标志,开启忽略大小写匹配 var regex = new RegExp(regexS, 'i'); var results = regex.exec(url); return results == null ? null : results[1]; }
关键修改说明
- 关键词检测:
/recordId/i.test(url)中的i标志让正则忽略大小写,不管URL里是recordId还是全小写的recordid都能匹配到;rt的检测同理。 - 参数提取:创建
RegExp时传入第二个参数'i',这样正则匹配参数名时就不会区分大小写,能正确提取recordid=xxx或recordId=xxx对应的值。 - 方法名修正:原代码里的
_geRecordId是笔误,改成_getRecordId避免调用时出现方法不存在的错误。
内容的提问来源于stack exchange,提问作者tester
相关产品推荐
相关产品推荐

