什么是正则表达式以及如何在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 陷阱

gy 标志的正则对象是“有状态”的。连续调用 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; ?>

相关推荐

在线咨询

点击这里给我发消息QQ客服

在线咨询

免费通话

24h咨询:4006964355


如您有问题,可以咨询我们的24H咨询电话!

免费通话

微信扫一扫

微信联系
返回顶部