当前位置: 首页 > news >正文

JS使用Regex校验出现卡顿

背景

使用vue3+naive ui 开发网站,在写表单校验规则,其中URL校验项使用了regex,表达式写的有问题,在校验某些URL出现卡顿。最后使用浏览器内置URL类的构建函数来校验,放弃了正则。

REGEX探讨

/^(https?:\/\/)?([\da-z\.-]+)\.([a-z]{2,6})([\/\w \.-]*)*\/?$/.test('https://www.tt.com/km/123/456/1231212121.py?method=view&fdId=112233');

问题出在(\/[\w.-]*)*这一段,它匹配的是/km/123/456/1231212121.py?method=view&fdId=112233

意思是将字符串按/分开,匹配之后的[A-Za-z0-9_.-],遇到新的斜杠就开始新的一轮匹配。

即依次匹配/km/123/456......

这个重复匹配斜杠开头没有问题,问题是后续的字符我限定的太少了,而这里有一个?,导致匹配失败后会重新回溯,重新尝试匹配。

比如一开始匹配的是/km/123/456/1231212121.py,遇到问号,觉得有问题,重新匹配到/km/123/456,然后后面的字符交给后续的表达式匹配。

我想到的解决方法就是直接匹配斜杠开头+任意字符:

/^(https?:\/\/)?([\da-z\.-]+)\.([a-z]{2,6})\/.*/.test('https://www.tt.com/km/123/456/1231212121.py?method=view&fdId=112233');

浏览器内置URL类探讨

export function checkUrl(url) {try {new URL(url);return true;} catch (e) {return false;}
}

当时是询问AI有没有其他的校验方法,比较中意的就是这个。但是这个URL类是浏览器内置的API,我需要确定一下它的构建函数是怎么校验url的。

如何确认URL是内置API

console.log(URL)

output: ƒ URL()

说明就是浏览器的API

确认URL构造函数内容

需要去翻阅浏览器源码

这里参照[chromuim/url](chromium/url at main · chromium/chromium)

阅读readme可以发现是由c++实现的gurl,对js环境表现为URL

校验内容:

scheme(即'http'等前缀) 和 host/path/query

是否有合法的 scheme → DoExtractScheme()

是否属于 special 协议 → IsStandard()

是否能成功拆解 host/path/query → DoParseAuthority() + ParsePath()

是否嵌套结构合法(NoStandardUrl会考虑) → DoParseFileSystemURL()

最终由 Canonicalize() 返回 is_valid_,决定 GURL 是否有效

http://www.hskmm.com/?act=detail&tid=28758

相关文章:

  • 2025舒适轮胎厂家最新推荐榜:静音耐磨,驾驶体验再升级!
  • 2025 净化铝型材十大品牌之一优选,推荐龙新铝业,最快24小时内发货
  • 手写Promise
  • 双列集合
  • 二项式反演
  • 2025 权威推荐!净化铝型材品牌 TOP5 排行榜:实力厂家精选,品质之选不容错过
  • 关于HashMap
  • sar(System Activity Reporter 系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一。
  • 车辆主动悬架线性最优控制(LQR)系统
  • 2025环保/植物/净醛/健康/无味腻子粉厂家推荐榜:专注多场景墙面基底解决方案供应!
  • 2025 泰国立体/高位/仓储/托盘/重型/流利式/贯通式/穿梭车/模具货架厂家推荐排行榜:聚焦多场景存储需求,精选优质供应商!
  • 2025 工控/核心板/工业/嵌入式主板板卡厂家推荐排行榜:聚焦多领域智能硬件核心供应!
  • 计划任务在不管用户是否登录都要运行时,bat不能正常运行处理办法
  • 2025 高压/高压空气/氦气/氩气压缩机厂家推荐榜:聚焦多场景压缩空气解决方案!
  • 2025 温室/蔬菜/花卉/单栋/玻璃温室/连栋/连栋膜温室/薄膜/塑料/钢架大棚厂家推荐榜:聚焦多场景种植需求,提供专业设施解决方案!
  • Delta并联机器人正逆解实现
  • SQL查询,直接生成json结果
  • 2025 MVR/三效/多效/结晶/废水/降膜蒸发器厂家口碑推荐榜:聚焦多行业废水处理与物料浓缩解决方案!
  • mindie开启DeepSeek的128K
  • MATLAB的无刷直流电机转速电流双闭环仿真实现
  • AI设计软件/工具/品牌/方案/大模型/开源模型/平台/小程序/插件公司推荐:专注多场景智能设计解决方案供应!
  • STM32环境配备keil5【保姆级】
  • 微波雷达模块让广告灯告别无效展示
  • 2025七水硫酸锌供货厂家最新推荐榜:品质稳定与高效服务的优
  • 从 1 到 1000:MyEMS 社区如何用开源力量搭建中小企业的 “零碳工具箱”?
  • 为什么你的项目总是延期?90%的团队忽略了这5个预警信号
  • 变量、常量和作用域
  • 用python定义类时,用子类继承父类,当父类需要从子类中传递很多形参时,该怎么处理
  • 量化(一)
  • 2025 年试验箱厂商最新推荐排行榜:涵盖高低温 / 恒温恒湿 / 冷热冲击等设备,精选研发实力强、质量管控严的优质企业