JavaScript如何正则匹配_常用正则表达式你记住了吗
发布时间 - 2025-12-31 00:00:00 点击率:次JavaScript中/\w+/会漏匹配含下划线的标识符,因其边界受非\w字符(如-)中断;应改用/a-zA-Z_*/g,并注意转义、贪婪性及exec()的lastIndex复用问题。
JavaS
cript 中用 RegExp 或字面量写正则,不是“记住了就能用”,关键在「边界控制」和「转义一致性」——尤其遇到下划线 _ 这种既不是单词字符也不是空白的符号时,稍不注意就漏匹配或过度匹配。
为什么 /\w+/ 会漏掉带下划线的字符串?
\w 在 JavaScript 中等价于 [a-zA-Z0-9_],看起来包含下划线,但问题常出在「上下文边界」:比如你想匹配变量名 user_name,但写成 /\w+/g 在字符串 "let user_name = 123" 中确实能捕获,可一旦它出现在连字符后如 "data-user_name",\w+ 就只拿到 "user"(因为 - 不是 \w,匹配在 - 处中断)。
- 真正要匹配「含下划线的标识符」,得显式定义字符集:
/[a-zA-Z_][a-zA-Z0-9_]*/g - 开头不能是数字,所以首字符单独限定为
[a-zA-Z_],后续才允许0-9 - 别依赖
\w做标识符匹配——它的行为在 Unicode 模式下还会变(u标志启用时支持更多语言字母)
String.prototype.match() 和 RegExp.prototype.exec() 匹配结果差异
两者对全局标志 g 的处理逻辑不同,直接影响你能否拿到所有含下划线的子串:
-
"a_b c_d".match(/[a-z_]+/g)→["a_b", "c_d"](返回全部匹配数组) -
const r = /[a-z_]+/g; r.exec("a_b c_d")→ 第一次只返回["a_b"],需循环调用才能取完 - 如果忘了重置
lastIndex(比如正则对象复用),exec()可能直接返回null,而match()没这问题
匹配含下划线的路径或文件名时,别忽略转义和贪婪陷阱
比如想从 "src/utils/helper_v2.js" 中提取 "helper_v2",写成 /[a-z_]+(?=\.js)/i 看似合理,但实际可能跨过中间路径:
const str = "src/v2_helper/main.js";
str.match(/[a-z_]+(?=\.js)/i); // → ["v2_helper/main"] —— 错!因为 [a-z_]+ 是贪婪的,一直吃到点号前
- 更安全的是锚定位置:
/[a-z_]+(?=\.js$)/i(加$确保点号在末尾) - 或者用非贪婪:
/[a-z_]+?(?=\.js)/i,但需确认前面没有其他点号干扰 - 路径场景建议优先用
split('/').pop().replace(/\.js$/, ''),比正则更稳
下划线本身在正则里不用转义(它不是元字符),但写在字符组里要注意位置:放在开头或结尾最安全,比如 [_a-z];若写成 [a-z_-],- 会被当成范围连接符,导致语法错误或意外含义。
# javascript
# java
# js
# 正则表达式
# ai
# 多语言
# 为什么
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何使用Sanctum进行API认证?(SPA实战)
QQ浏览器网页版登录入口 个人中心在线进入
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
如何用JavaScript实现文本编辑器_光标和选区怎么处理
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
如何将凡科建站内容保存为本地文件?
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
如何确保FTP站点访问权限与数据传输安全?
如何在IIS管理器中快速创建并配置网站?
android nfc常用标签读取总结
网站页面设计需要考虑到这些问题
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧
Swift中循环语句中的转移语句 break 和 continue
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
如何用虚拟主机快速搭建网站?详细步骤解析
香港服务器网站卡顿?如何解决网络延迟与负载问题?
移动端脚本框架Hammer.js
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
Chrome浏览器标签页分组怎么用_谷歌浏览器整理标签页技巧【效率】
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
如何在云主机上快速搭建网站?
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
Android 常见的图片加载框架详细介绍
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
高端建站三要素:定制模板、企业官网与响应式设计优化
Python并发异常传播_错误处理解析【教程】
如何用搬瓦工VPS快速搭建个人网站?
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
如何快速搭建FTP站点实现文件共享?
实例解析Array和String方法
Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】
网站建设要注意的标准 促进网站用户好感度!
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
油猴 教程,油猴搜脚本为什么会网页无法显示?
详解jQuery中的事件
详解jQuery停止动画——stop()方法的使用
如何用PHP快速搭建CMS系统?
如何利用DOS批处理实现定时关机操作详解
Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集

