javascript正则表达式怎么写_如何用它进行字符串匹配【教程】
发布时间 - 2026-01-27 00:00:00 点击率:次JavaScript正则表达式需关注构造方式(字面量或RegExp构造函数)、标志位组合及方法选择;test()返回布尔值,exec()返回匹配详情且具状态;match()行为取决于g标志,全局匹配推荐matchAll();注意点号、贪婪、Unicode和flag冲突等陷阱。
JavaScript 正则表达式不是“写出来就能用”,关键在 RegExp 实例的构造方式、标志位组合,以及匹配方法(test()、exec()、match() 等)的选择是否匹配你的目标场景。
怎么创建一个有效的正则表达式对象
两种写法:字面量和构造函数。字面量更常用,但动态拼接时必须用 RegExp 构造函数。
- 字面量:
/\d{3}-\d{4}/—— 不能拼变量,斜杠间不能有空格,转义用\\ - 构造函数:
new RegExp('\\d{3}-\\d{4}')—— 字符串里反斜杠要双写,否则会被 JS 字符串解析吃掉一层 - 带标志位:
/abc/gi等价于new RegExp('abc', 'gi');但new RegExp('abc', 'g' + 'i')也合法
test() 和 exec() 的核心区别在哪
test() 只返回布尔值,适合做“是否存在匹配”判断;exec() 返回匹配详情(含 index、groups),且对全局正则有状态(lastIndex),多次调用会继续往后找。
- 用
test()判断邮箱格式:/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email) - 用
exec()提取所有数字:const re = /\d+/g; let m; while ((m = re.exec(str)) !== null) { console.log(m[0]); } - ⚠️ 全局正则被多个
exec()复用时,lastIndex不重置会导致漏匹配 —— 建议每次用前手动设re.lastIndex = 0,或改用str.match(re)
为什么 match() 有时返回 null,有时是数组
match() 行为取决于正则是否带 g 标志:
- 无
g:返回第一个匹配的详细信息数组(含index、input),没匹配则null - 有
g:只返回纯匹配字符串数组,不带位置信息;捕获组全丢弃 - 想同时拿到全局匹配 + 捕获组?别用
match(),改用matchAll()(ES2025+):[...str.matchAl返回迭代器,每个元素是带分组的数组
l(/(\d+)-(\d+)/g)]
常见陷阱:点号、贪婪、Unicode 和 flag 冲突
点号 . 默认不匹配换行符,^/$ 默认只认字符串首尾,\w 不包含中文 —— 这些都容易误判。
- 让
.匹配换行:/pattern/s(sflag,又称“dotAll”);没这个 flag 时用[\s\S]替代 - 避免过度贪婪:
.*会吞到最右再回退;要最小匹配就加?:.*?或\w+? - 匹配中文等 Unicode 字符:
/\p{Script=Han}/u(需uflag),普通\w在中文环境基本失效 -
g和y(sticky)不能共存;m(多行)让^/$匹配每行起止,不是整个字符串
真正难的不是写出一个能跑的正则,而是预判它在边界输入(空字符串、特殊符号、超长文本、不同编码)下的行为 —— 尤其是全局模式复用、标志位叠加、Unicode 处理这三块,最容易在线上突然出错。
# javascript
# java
# js
# 正则表达式
# 编码
# ai
# 邮箱
# 区别
# 字符串解析
# 字符串数组
# 为什么
# NULL
# while
# 构造函数
# const
# 字符串
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
Laravel如何实现数据库事务?(DB Facade示例)
javascript读取文本节点方法小结
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
如何快速搭建高效香港服务器网站?
Python自然语言搜索引擎项目教程_倒排索引查询优化案例
动图在线制作网站有哪些,滑动动图图集怎么做?
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
Laravel怎么实现模型属性的自动加密
电商网站制作价格怎么算,网上拍卖流程以及规则?
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
如何正确选择百度移动适配建站域名?
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
如何在万网自助建站中设置域名及备案?
如何用狗爹虚拟主机快速搭建网站?
Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
如何为不同团队 ID 动态生成多个独立按钮
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
Java解压缩zip - 解压缩多个文件或文件夹实例
如何在IIS中配置站点IP、端口及主机头?
如何在自有机房高效搭建专业网站?
Android 常见的图片加载框架详细介绍
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
北京网站制作公司哪家好一点,北京租房网站有哪些?
Internet Explorer官网直接进入 IE浏览器在线体验版网址
微信h5制作网站有哪些,免费微信H5页面制作工具?
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
JavaScript如何实现类型判断_typeof和instanceof有什么区别
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
如何在香港服务器上快速搭建免备案网站?
Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】
Python图片处理进阶教程_Pillow滤镜与图像增强
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
如何在阿里云ECS服务器部署织梦CMS网站?
高端网站建设与定制开发一站式解决方案 中企动力
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
如何构建满足综合性能需求的优质建站方案?
如何在阿里云虚拟主机上快速搭建个人网站?
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体


