什么是正则表达式以及如何在javascript中应用它?【教程】
技术百科
夜晨
发布时间:2026-01-28
浏览: 次 正则表达式是JavaScript中处理字符串的基础设施,用于搜索、替换、提取和验证;它是由特殊字符组成的模式,描述字符串结构,需配合match()、replace()、test()等方法使用。
正则表达式不是“高级技巧”,而是 JavaScript 中处理字符串的基础设施——只要你要做搜索、替换、提取或验证(比如邮箱、手机号、URL),它就绕不开。
正则表达式到底是什么?
它是一套用特殊字符组合成的“模式”,用来描述字符串的结构。比如 /\d{3}-\d{4}/ 就表示“三位数字 + 一个短横线 + 四位数字”,能匹配 "123-4567",但不匹配 "12-34567"。
关键点:正则本身不执行操作,它只是“告诉 JS 你想要什么样的字符串”。真正干活的是 String.prototype.match()、String.prototype.replace()、RegExp.test() 这些方法。
JavaScript 中创建正则的两种方式

立即学习“Java免费学习笔记(深入)”;
/\b\w+@\w+\.\w+\b/gi
构造函数写法适合动态生成(比如从用户输入拼接):
new RegExp(`\\b\\w+@\\w+\\.${domain}\\b`, 'gi')
注意:构造函数中反斜杠要双写,因为字符串先解析一次转义;而字面量里只被正则引擎解析一次。
- 字面量不能拼变量,
/hello ${name}/是语法错误 - 全局标志
g决定是否找全部匹配,不加就只找第一个 - 忽略大小写用
i,多行匹配用m,粘性匹配用y(较少用)
最常踩的坑:test() 方法的 lastIndex 陷阱
带 g 或 y 标志的正则对象是“有状态”的。连续调用 test() 可能返回不同结果:
const r = /a/g;
r.test('ab'); // true
r.test('ab'); // false —— 因为 lastIndex 已移到位置 1,下次从那里开始找
这在循环中验证多个字符串时极易出错。解决办法:
- 去掉
g标志(如果只关心“是否匹配”,不需要全局) - 每次调用前手动重置:
r.lastIndex = 0 - 改用
String.prototype.search()或RegExp.prototype.exec()配合循环逻辑
实用场景:提取、替换、校验三件套
提取邮箱:
'Contact me at user@example.com'.match(/\b\w+@\w+\.\w+\b/g)
// → ['user@example.com']
替换所有连续空白为单个空格:
'a\t\n b'.replace(/\s+/g, ' ')
// → 'a b'
校验密码强度(至少 8 位,含大小写字母和数字):
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/.test('Abc12345')
// → true
注意:密码校验别只靠前端正则,后端必须重复验证;而且真实项目中建议用专门的密码策略库,而不是硬写复杂正则。
正则写得越长,越容易漏掉边界情况(比如邮箱里允许 + 和 .,但不能开头或结尾)。与其死磕一个“完美”正则,不如分步校验:先格式,再查域名是否存在,最后看 SMTP 响应。
# ai
# 后端
# js
# 循环
# javascript
# java
# String
# 构造函数
# 字符串
# 前端
# 邮箱
# 正则表达式
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Win11怎么关闭任务栏小组件_Windows11
- 如何在 Go 中判断变量是否为函数类型
- Win10如何更改用户账户控制_Windows10
- c++中如何使用std::variant_c++1
- PHP怎么接收前端传的时间戳_处理时间戳参数转换技
- c++如何连接Redis c++ hiredis库
- windows如何修改文件默认打开方式_windo
- c++怎么实现高并发下的无锁队列_c++ std:
- windows如何禁用驱动程序强制签名_windo
- Win10如何更改任务栏高度_Windows10解
- Win11如何更新显卡驱动 Win11检查和安装设
- Windows蓝屏错误0x00000018怎么处理
- Python数据抓取合法性_合规说明【指导】
- 一文教你快速开通网站LOGO图
- php增删改查报错1054怎么办_字段名错误排查修
- php文件怎么变mp4保存_php输出视频流保存为
- 如何使用Golang table-driven基准
- php中$this和::能混用吗_对象与静态作用域
- 如何有效拦截拼接式恶意域名的垃圾信息
- LINUX下如何配置VLAN虚拟局域网_在LINU
- php中::能访问全局变量吗_全局作用域与类作用域
- Win11麦克风没声音怎么设置_Win11麦克风权
- c++ stringstream用法详解_c++字
- Windows10系统怎么查看系统版本_Win10
- Win10怎样设置闹钟贪睡时间 Win10闹钟贪睡
- Windows10如何更改开机密码_Win10登录
- 如何使用Golang处理网络超时错误_Golang
- Win11怎么设置屏保时间_调整Win11屏幕保护
- Win10如何卸载自带Edge_Win10彻底卸载
- c++中如何使用auto关键字_c++11类型推导
- 如何使用Golang理解结构体指针方法接收者_Go
- Win11怎么设置开机问候语_自定义Win11锁屏
- Python包结构设计_大型项目组织解析【指导】
- php修改数据怎么改富文本_update更新htm
- Windows任务计划服务异常原因_任务调度失败的
- Windows怎样关闭开始菜单推荐广告_Windo
- ACF 教程:正确更新嵌套在多层 Group 字段
- Win11怎么关闭贴靠布局_Win11禁用窗口最大
- mac怎么分屏_MAC双屏显示与分屏操作技巧【指南
- Win11怎么把图标拖到任务栏_Win11固定应用
- Win11怎么更改系统语言_Win11中文语言包下
- Win11怎么设置开机密码_Windows11账户
- Win11怎么查看已连接wifi密码 Win11查
- Windows10系统怎么查看IP地址_Win10
- VSC怎么快速定位PHP错误行_错误追踪设置法【方
- 如何使用Golang实现容器健康检查_监控和自动重
- PHP 中如何在函数内持久化修改引用变量的指向
- Windows10电脑怎么连接蓝牙设备_Win10
- windows如何备份注册表_windows导出和
- php转mp4怎么设置帧率_调整php生成mp4视

QQ客服