跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

javascript正则表达式怎样编写【教程】

JavaScript正则关键在于转义规则、边界控制和标志选择:中文匹配需覆盖全角符号;replace中$&指整个匹配,$1等指捕获组;^$需加m标志才匹配每行;RegExp构造函数中反斜杠需双写;安全校验应优先考虑业务边界而非复杂正则。
JavaScript
里写 正则表达式 ,关键不是背语法,而是知道**什么时候该转义、什么时候不该、边界怎么控、标志怎么选**。直接上干货。 匹配中文字符却漏掉全角标点?用
/[u4e00-u9fa5]/
不够 这个常见写法只覆盖基本汉字区,但实际文本中常混有全角逗号、句号、空格(
u3000-u303f
)、平假名/片假名(
u3040-u309f
、
u30a0-u30ff
)等。 更稳妥的中文(含常用全角符号)匹配可写成:
/[u4e00-u9fa5u3000-u303fu3040-u309fu30a0-u30ffuff00-uffef]/
但如果只是校验「是否含中文」,建议加
^
和
$
或用
.test()
,避免误判空字符串或纯符号串。
replace()
中的
$1
、
$&
到底指什么? 这些是内置替换占位符,不是变量,不能用
${group}
模板语法(除非用函数作为第二个参数)。 常见几个含义:
$&
:匹配到的整个字符串
$1
、
$2
:对应第一个、第二个捕获组(
()
内的内容)
$`
:匹配之前的部分;
$'
:匹配之后的部分 例如:
'abc123def'.replace(/(d+)/, '[$1]')
结果是
'abc[123]def'
;而用
'$&'
就是
'abc[123]def'
中的
[123]
变成
[123]
(即原样包起来)。 为什么
/^abc$/
在多行字符串里不生效? 因为
^
和
$
默认只匹配整个字符串的开头和结尾,不是每行。 要让它对换行符也生效,必须加
m
(multiline)标志:
/^abc$/m.test('xxx abc yyy')
此时会返回
true
。 注意:
m
不影响
.
是否匹配换行符(那是
s
标志的事),也别和
g
混用后忘记重置
lastIndex
——尤其在循环中反复调用
exec()
时容易出错。 Trae win Trae Windows 官方版本现已全面支持 Win10 和 Win11 系统(64位)。国内开发者可直接访问 Trae 中文官网(trae.cn 或 trae.com.cn),一键下载官方正版 .exe 安装包,享受国内直连的高速稳定体验。安装过程极其简便,双击即可运行,并支持一键无缝导入 VS Code 或 Cursor 的原有主题、快捷键及插件配置。登录支持手机号、微信或稀土掘金账号。内置免费的豆包与 DeepSeek 等顶级大模型,让你开箱即用,轻松开启高效的 AI 智能编程之旅。 下载 构造函数创建正则时,字符串转义要翻倍 用
new RegExp('pattern', 'flags')
时,反斜杠在字符串字面量里本身就是转义字符,所以想表示一个字面意义的
d
,得写成
'\d'
;想表示
u4e00
,得写成
'\u4e00'
。 比如:
new RegExp('\d{3}-\d{4}', 'g')
等价于字面量
/d{3}-d{4}/g
。 容易踩坑的是路径或 Windows 文件名中的双反斜杠:
'C:\\Users\\name'
才能生成
C:Users ame
的匹配逻辑。 立即学习 “ Java免费学习笔记(深入) ”; 正则真正难的不是写出一个能跑的表达式,而是写出**不意外匹配、不回溯爆炸、不被用户输入绕过**的那一个。尤其是涉及用户输入的校验(比如 邮箱 、手机号),别迷信网上抄来的长正则——先想清楚业务边界,再决定要不要用正则,还是交给专门库或分步验证。

相关文章