0

0

javascript正则表达式如何编写_常用模式匹配技巧有哪些【教程】

夜晨

夜晨

发布时间:2026-01-29 14:25:02

|

886人浏览过

|

来源于php中文网

原创

应使用 /\p{Script=Han}/u 匹配中文字符,避免 \u4e00-\u9fa5 范围遗漏扩展区汉字和古籍用字;需加 u 标志防报错,老浏览器需降级处理。

javascript正则表达式如何编写_常用模式匹配技巧有哪些【教程】

匹配中文字符要避开 [\u4e00-\u9fa5] 这个坑

这个范围看似覆盖了常用汉字,但实际漏掉大量扩展区汉字(如生僻字、古籍用字、emoji 表情里的中文字形),且在 Unicode 13+ 中已不完整。更稳妥的做法是用 /\p{Script=Han}/u,但必须加 u 标志,否则会报错 SyntaxError: Invalid regular expression

常见误用:/[\u4e00-\u9fa5]/.test("émonde") → 返回 false(正确),但 /[\u4e00-\u9fa5]/.test("?") → 也返回 false(错误,该字在扩展 A 区)。

  • 生产环境建议优先用 /\p{Script=Han}/u,配合 String.prototype.matchAll() 提取全部中文
  • 若需兼容老浏览器(如 IE 或未开启 u 支持的 Node.js /[\u4e00-\u9fa5\u3400-\u4dbf\u20000-\u2a6df\u2a700-\u2b73f\u2b740-\u2b81f\u2b820-\u2ceaf]/ 手动拼接多段 Unicode 区间
  • 注意:\p{...} 在 Chrome 64+、Firefox 78+、Node.js 12.20+ / 14.10+ 才稳定支持

^$ 在多行模式下行为完全不同

默认情况下,^ 只匹配整个字符串开头,$ 只匹配结尾;一旦加上 m 标志(/^abc$/m),它们就变成匹配每行的起始和结束位置——这点常被忽略,导致验证失败或误删内容。

典型场景:校验用户输入的多行配置项,每行格式为 key=value,要求不能有空行或非法字符:

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

/^[a-z]+=[^=\n\r]+$/gm

若漏掉 m,整段文本会被当作单行处理,^$ 就只锚定首尾,中间换行符全被无视。

  • /^abc/m.test("x\nabc\ny")true(因为第二行以 abc 开头)
  • /^abc/.test("x\nabc\ny")false^ 锚定整个字符串开头)
  • 搭配 g 使用时,m 不影响全局匹配次数,只改变 ^/$ 的语义

提取 URL 中的域名别写 /https?:\/\/([^\/]+)/

这个正则看着简洁,但会把 https://a.com/b?c=d#e 中的 a.com/b?c=d#e 全抓进去,而你真正想要的只是 a.com。问题出在 [^\/]+ 没限制“只到第一个 /”,也没排除协议后的空格或换行。

Hitems
Hitems

HITEMS是一个AI驱动的创意设计平台,支持一键生成产品

下载

更安全的写法是明确切分层级:

/https?:\/\/([^\/\s]+)(\/|$)/i

其中 ([^\/\s]+) 确保捕获的是不含斜杠和空白的连续字符,即域名(含端口,如 example.com:3000);(\/|$) 保证后面紧跟 / 或字符串结束,避免跨路径捕获。

  • 若还需排除端口,可用 /https?:\/\/([^\/\s:]+)(?::\d+)?(\/|$)/i
  • 对带用户信息的 URL(如 http://user:pass@example.com),需额外处理 @ 前部分,否则 user:pass 会被误认为域名
  • 真正健壮的 URL 解析应优先用 new URL() 构造函数,正则只用于简单预筛或无法用 API 的环境

贪婪匹配导致 .* 吃掉太多内容

.* 默认是贪婪的,遇到 "abc\"def\"ghi" 这类含多个引号的字符串,/"(.*)"/ 会匹配从第一个 " 到最后一个 " 之间的全部内容,即 abc"def"ghi,而不是你期望的 abcdef

解决方法不是盲目加 ?(变成惰性),而是根据语义选择更精确的模式:

  • 匹配双引号内不含引号的内容:用 /"([^"]*)"/(比 /"(.*?)"/ 更快、更确定)
  • 允许转义引号(如 "he said \"hi\""):用 /"((?:[^"\\\\]|\\\\.)*)"/,其中 (?:[^"\\\\]|\\\\.) 表示“非引号非反斜杠”或“任意被反斜杠转义的字符”
  • 惰性量词 .*? 虽然能缓解问题,但在长文本中性能较差,V8 引擎对其优化有限,且易引发回溯灾难(如嵌套括号场景)

真正难缠的是嵌套结构(如 HTML 标签、JSON 对象),正则根本不适合处理——这时候该交出去给 DOMParser 或 JSON.parse()。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

419

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

535

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

311

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

77

2025.09.10

js正则表达式
js正则表达式

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

514

2023.06.20

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

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

251

2023.07.05

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

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

746

2023.07.05

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

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

215

2023.08.11

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

19

2026.01.29

热门下载

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

精品课程

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

共58课时 | 4.3万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.1万人学习

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

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