0

0

javascript如何使用正则表达式进行文本处理【教程】

紅蓮之龍

紅蓮之龍

发布时间:2026-01-28 15:00:50

|

808人浏览过

|

来源于php中文网

原创

JavaScript正则关键在于正确选择字面量或RegExp构造函数、区分exec/match返回结构、警惕g标志缺失导致静默失败;静态模式用字面量,动态变量需RegExp并转义特殊字符;需捕获组+全局遍历时用exec,取全部匹配用matchAll,替换复杂逻辑用函数参数。

javascript如何使用正则表达式进行文本处理【教程】

JavaScript 里用正则表达式做文本处理,关键不是“会不会写正则”,而是「什么时候该用 RegExp 构造函数,什么时候直接写字面量」、「execmatch 返回结构为什么总搞混」、「全局标志 g 不加会静默失败」。

字面量 vs RegExp 构造函数:别在运行时拼接正则

字面量写法(如 /\d+/g)在代码加载时就编译好,性能好、可读性强;RegExp 构造函数(如 new RegExp('\\d+', 'g'))适合模式动态生成。但注意:字符串转义要翻倍——'\\d+' 才能表示一个 \d+,漏掉一个反斜杠就会匹配字面的 d+

  • 静态模式(比如校验邮箱、提取日期)→ 优先用字面量
  • 模式含变量(比如搜索用户输入的关键词)→ 必须用 RegExp,且对变量内容做 replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') 转义
  • 不要写 new RegExp('/\\d+/g') —— 斜杠和标志是字面量语法,构造函数里传了就是错的

exectest:需要反复匹配或带状态时才用

exec 是唯一能配合 g 标志「记住上次位置」的方法,适合循环提取所有匹配;test 只返回布尔值,但会偷偷修改 lastIndex(尤其在共享正则对象时容易出错)。不用 g 时,exectest 行为稳定;加了 g 就得小心重用同一个正则实例。

  • 只判断是否存在 → 用 test,但别复用带 g 的正则对象
  • 要取全部匹配结果 → 用 matchmatchAll(见下条),别手写 exec 循环
  • 必须用 exec 的场景:需要捕获组 + 全局遍历 + 同时访问 indexinput 属性

matchmatchAllreplace:日常文本处理主力

match 在无 g 时返回带捕获组的数组([fullMatch, group1, group2]),有 g 时只返回纯匹配字符串数组(丢弃分组);matchAll 总是返回迭代器,每个元素都是完整 exec 结果,安全又清晰;replace 的第二个参数可以是字符串(支持 引用捕获组)或函数(参数依次为匹配全文、各捕获组、起始索引、原字符串)。

易森网络企业版
易森网络企业版

如果您是新用户,请直接将本程序的所有文件上传在任一文件夹下,Rewrite 目录下放置了伪静态规则和筛选器,可将规则添加进IIS,即可正常使用,不用进行任何设置;(可修改图片等)默认的管理员用户名、密码和验证码都是:yeesen系统默认关闭,请上传后登陆后台点击“核心管理”里操作如下:进入“配置管理”中的&ld

下载

立即学习Java免费学习笔记(深入)”;

  • 想拿所有匹配 + 捕获内容 → 用 matchAll,别用 matchg
  • 替换逻辑简单(比如统一换前缀)→ 字符串替换,如 'abc'.replace(/^/, 'X-')
  • 替换依赖匹配内容(比如把数字乘以 2)→ 用函数替换:'a1b2'.replace(/(\d)/g, (_, d) => +d * 2)

常见陷阱:标志、Unicode、边界问题

g(全局)、i(忽略大小写)、m(多行)三个标志最常用,但 u(Unicode)容易被忽略:没有它,\w 不匹配中文,. 不匹配 emoji,^/$ 在换行符处行为异常;y(粘性)几乎没人用,除非你真在模拟流式解析。

  • 处理中文、emoji、生僻字 → 正则开头加 u,比如 /\p{Script=Han}/u
  • 想匹配单词边界但含中文 → \b 失效,改用 (? 或直接按需切分
  • ^$ 默认只匹配整个字符串首尾,多段文本每行都要匹配?加 m 标志

真正难的不是写出一个能跑的正则,而是当它在线上突然不匹配、或无限循环(回溯爆炸)时,你能快速定位是标志没开、转义漏了、还是 Unicode 边界没对齐。

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

513

2023.06.20

正则表达式不包含
正则表达式不包含

正则表达式,又称规则表达式,,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本。php中文网给大家带来了有关正则表达式的相关教程以及文章,希望对大家能有所帮助。

251

2023.07.05

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

745

2023.07.05

java正则表达式匹配字符串
java正则表达式匹配字符串

在Java中,我们可以使用正则表达式来匹配字符串。本专题为大家带来java正则表达式匹配字符串的相关内容,帮助大家解决问题。

214

2023.08.11

正则表达式空格
正则表达式空格

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。本专题为大家提供正则表达式相关的文章、下载、课程内容,供大家免费下载体验。

351

2023.08.31

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

293

2023.11.13

正则表达式空格如何表示
正则表达式空格如何表示

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。想了解更多正则表达式空格怎么表示的内容,可以访问下面的文章。

236

2023.11.17

正则表达式中如何匹配数字
正则表达式中如何匹配数字

正则表达式中可以通过匹配单个数字、匹配多个数字、匹配固定长度的数字、匹配整数和小数、匹配负数和匹配科学计数法表示的数字的方法匹配数字。更多关于正则表达式的相关知识详情请看本专题下面的文章。php中文网欢迎大家前来学习。

532

2023.12.06

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

31

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4.2万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号