JS(正则表达式)

1. 正则表达式基础

  • 定义:用于描述、匹配字符串模式的表达式

  • 作用:文本搜索、替换、验证和提取

  • 语法 :/pattern/modifiers

2. 正则表达式构成

组成部分 说明 示例
定界符 通常使用/ /abc/
元字符 特殊含义的字符 . * + ? ^ $
模式修正符 匹配模式修饰 i g m

3. 元字符分类

原子筛选方式

| 元字符 | 描述 | 示例 |
|----------|-------------|------------------|---|---|
| [abc] | 匹配方括号内任意字符 | [aeiou] 匹配元音字母 |
| [^abc] | 匹配不在方括号内的字符 | [^0-9] 匹配非数字 |
| [a-z] | 匹配范围内的字符 | [0-9] 匹配数字 |
| `x | y` | 匹配x或y |||

原子集合(预定义字符类)

元字符 描述 等价于
. 匹配除换行符外任意字符 -
\d 匹配数字 [0-9]
\D 匹配非数字 [^0-9]
\s 匹配空白字符 [ \t\n\r\f\v]
\S 匹配非空白字符 [^ \t\n\r\f\v]
\w 匹配单词字符 [a-zA-Z0-9_]
\W 匹配非单词字符 [^a-zA-Z0-9_]

原子数量限定

元字符 描述 示例
{n} 匹配恰好n次 \d{3} 匹配3位数字
{n,} 匹配至少n次 \d{2,} 匹配至少2位数字
{n,m} 匹配n到m次 \d{2,4} 匹配2-4位数字
* 匹配0次或多次 a* 匹配0个或多个a
+ 匹配1次或多次 a+ 匹配1个或多个a
? 匹配0次或1次 a? 匹配0个或1个a

边界控制

元字符 描述 示例
^ 匹配字符串开始 ^abc 匹配以abc开头的字符串
$ 匹配字符串结束 xyz$ 匹配以xyz结尾的字符串
\b 匹配单词边界 \bword\b 匹配独立单词word
\B 匹配非单词边界 \Bword\B 匹配非独立单词word

4. 模式修正符

修饰符 描述
i 不区分大小写匹配
g 全局匹配(查找所有匹配)
m 多行匹配

5. 常用正则表达式示例

用途 正则表达式
非空验证 /\S+/
邮箱验证 /[\w-]+@([\w-]+\.)+[a-zA-Z]{2,}/
手机号验证 /^1[3-9]\d{9}$/
URL验证 /^https?:\/\/([\w-]+\.)+\S+$/
汉字匹配 /[\u4e00-\u9fa5]/
日期格式 /\d{4}[-/.]\d{1,2}[-/.]\d{1,2}/
身份证号 /\d{15}(\d{2}[0-9X])?/
用户名 /^[a-zA-Z]\w{5,17}$/

6. JavaScript正则方法

RegExp对象方法

方法 描述 示例
test() 检测是否匹配 /\d+/.test("123") → true
exec() 执行匹配搜索 /\d+/.exec("abc123") → "123"

String对象方法

方法 描述 示例
match() 查找匹配 "123abc".match(/\d+/) → "123"
replace() 替换匹配 "abc".replace(/a/, "A") → "Abc"
search() 搜索匹配位置 "abc".search(/b/) → 1
split() 按模式分割 "a,b,c".split(/,/) → "a","b","c"

7. 高级技巧

  • 贪婪匹配 :默认尽可能多匹配(.+)

  • 非贪婪匹配 :尽可能少匹配(.+?)

  • 分组捕获 :使用()捕获匹配内容

  • 反向引用 :使用\1引用第一个分组

8. 实用示例

javascript 复制代码
// 手机号验证
function validatePhone(phone) {
    return /^1[3-9]\d{9}$/.test(phone);
}

// 提取所有数字
function extractNumbers(text) {
    return text.match(/\d+/g) || [];
}

// 邮箱验证
function validateEmail(email) {
    return /^[\w-]+@([\w-]+\.)+[a-zA-Z]{2,}$/.test(email);
}

// 替换日期格式
function formatDate(dateStr) {
    return dateStr.replace(/(\d{4})-(\d{2})-(\d{2})/, "$1年$2月$3日");
}
复制代码
相关推荐
linux_cfan1 小时前
videojs v10 源代码系列解读:35 · HLS 解析器:multivariant 与 media playlist
前端·javascript·音视频
web打印社区1 小时前
汽修 / 4S 店:维修工单、结算单网页怎么静默出纸
开发语言·前端·javascript·chrome·ecmascript
UIU1142 小时前
同一个变量在两个 .c 文件里类型不一致,程序会怎样?
c++·学习·c#
波力海苔夹心脆67513 小时前
C# 值类型与引用类型详解:存储位置、赋值机制、参数传递、相等比较、装箱拆箱与常见陷阱
开发语言·jvm·经验分享·笔记·c#·.net
估值探索者14 小时前
【Python量化策略实战 #02】多因子合成mom和vol两因子打分合成
开发语言·c++·python·数据挖掘·c#
研☆香15 小时前
jQuery + Swiper.js 实现动态渲染轮播图
前端·javascript·jquery
哭泣方源炼蛊15 小时前
正则表达式c++内容汇集
数据库·c++·mysql·正则表达式
特立独行的猫A20 小时前
仓颉版 Tauri:基于轻量化线程与纯血鸿蒙架构的下一代 Web 混合开发利器
javascript
李游Leo20 小时前
HarmonyOS 7 ArkTS + ohpm:三方 JS 库副作用隔离与 API 26 升级回归【鸿蒙心迹】
javascript·回归·harmonyos
你挚爱的强哥20 小时前
【sgKeyboard】自定义组件:虚拟键盘
前端·javascript·计算机外设