正则表达式【JavaScript】

devtools/2024/10/18 14:16:31/

JavaScript的正则表达式(Regular Expressions,简称Regex或RegExp)是一种强大的工具,用于匹配字符串中的模式。正则表达式包含许多元字符(Metacharacters),这些元字符用于定义模式的结构。

一、元字符

以下是一些常用的JavaScript正则表达式元字符及其含义:

1. 基本元字符

  • .:匹配除换行符之外的任何单个字符。
  • ^:匹配输入字符串的开始位置。
  • $:匹配输入字符串的结束位置。
  • \b:匹配单词边界(单词的开头或结尾)。
  • \B:匹配非单词边界。

2. 字符类

  • [...]:匹配字符集中的任何一个字符。例如,[abc] 匹配 ab 或 c
  • [^...]:匹配不在字符集中的任何一个字符。例如,[^abc] 匹配除了 abc 之外的任何一个字符。
  • \d:匹配任何一个数字字符(等价于 [0-9])。
  • \D:匹配任何一个非数字字符(等价于 [^0-9])。
  • \w:匹配任何一个字母、数字或下划线字符(等价于 [A-Za-z0-9_])。
  • \W:匹配任何一个非字母、数字或下划线字符(等价于 [^A-Za-z0-9_])。
  • \s:匹配任何一个空白字符(包括空格、制表符、换页符等)。
  • \S:匹配任何一个非空白字符。

3. 量词

  • *:匹配前面的元素零次或多次。
  • +:匹配前面的元素一次或多次。
  • ?:匹配前面的元素零次或一次。
  • {n}:匹配前面的元素正好 n 次。
  • {n,}:匹配前面的元素至少 n 次。
  • {n,m}:匹配前面的元素至少 n 次,但不超过 m 次。

4. 分组和捕获

  • (...):分组并捕获匹配的子表达式。
  • (?:...):分组但不捕获匹配的子表达式。
  • (?=...):正向前瞻,匹配但不在结果中包含。
  • (?!...):负向前瞻,匹配但不在结果中包含。
  • (?<=...):正向后顾,匹配但不在结果中包含。
  • (?<!...):负向后顾,匹配但不在结果中包含。

5. 常用转义字符

  • \\:匹配反斜杠字符。
  • \n:匹配换行符。
  • \t:匹配制表符。
  • \r:匹配回车符。
  • \f:匹配换页符。

6. 其他元字符

  • |:或操作符,匹配两者之一。例如,a|b 匹配 a 或 b

7. 示例:

为了更好地理解这些正则表达式元字符和方法,我们可以通过具体的JavaScript实例来说明。

实例1: 使用 ., ^, 和 $

javascript">let str = "hello";// 使用 . 匹配任意字符
console.log(/./.test(str)); // true,因为 . 可以匹配任意字符// 使用 ^ 匹配字符串开始的位置
console.log(/^h/.test(str)); // true,因为字符串以 'h' 开头// 使用 $ 匹配字符串结束的位置
console.log(/o$/.test(str)); // true,因为字符串以 'o' 结尾

实例2: 使用 \w\W\d\D\s\S

javascript">let str = "Hello_123!";// 使用 \w 匹配数字、字母和下划线
console.log(/\w/.test(str)); // true,因为 'H' 是字母// 使用 \W 匹配非数字和字母
console.log(/\W/.test(str)); // true,因为 '!' 是非数字和字母// 使用 \d 匹配数字
console.log(/\d/.test(str)); // true,因为 '1' 是数字// 使用 \D 匹配非数字
console.log(/\D/.test(str)); // true,因为 'H' 是非数字// 使用 \s 匹配空白字符
console.log(/\s/.test(str)); // false,因为没有空白字符// 使用 \S 匹配非空白字符
console.log(/\S/.test(str)); // true,因为 'H' 是非空白字符

实例3: 使用 [][^a-z]+*?

javascript">let str = "Hello123!";// 使用 [] 匹配里面的任意字符
console.log(/[a-z]/.test(str)); // true,因为 'e' 是小写字母// 使用 [^a-z] 匹配除a到z之外的所有字符
console.log(/[^a-z]/.test(str)); // true,因为 'H' 不是小写字母// 使用 + 匹配重复一次或者多次
console.log(/l+/.test(str)); // true,因为 'll' 是重复的 'l'// 使用 * 匹配重复0次或者多次
console.log(/x*/.test(str)); // true,因为 'x' 可以重复0次// 使用 ? 匹配重复1次或者是0次
console.log(/H?/.test(str)); // true,因为 'H' 出现1次

实例4: 使用 ()|?:?=?!?<=?<!{4,8}

javascript">let str = "Hello123!";// 使用 () 分组匹配
console.log(/(l)/.test(str)); // true,因为 'l' 被分组匹配// 使用 | 或者
console.log(/H|e/.test(str)); // true,因为 'H' 或 'e' 存在// 使用 ?: 分组匹配不捕获
console.log(/(?:l)/.test(str)); // true,但不会捕获 'l'// 使用 ?= 正向肯定预查
console.log(/H(?=e)/.test(str)); // true,因为 'H' 后面是 'e',但不匹配 'e'// 使用 ?! 正向否定预查
console.log(/H(?!x)/.test(str)); // true,因为 'H' 后面不是 'x'// 使用 ?<= 反向肯定预查
console.log(/(?<=H)e/.test(str)); // true,因为 'e' 前面是 'H',但不匹配 'H'// 使用 ?<! 反向否定预查
console.log(/(?<!x)e/.test(str)); // true,因为 'e' 前面不是 'x'// 使用 {4,8} 最少4位 最多8位匹配
console.log(/[a-z]{4,8}/.test(str)); // true,因为 'Hello' 符合4到8位的条件

实例5: 使用 test()exec()match()search()replace()

javascript">let str = "Hello, World!";// 使用 test()
console.log(/Hello/.test(str)); // true,因为 'Hello' 存在于字符串中// 使用 exec()
let result = /Hello/.exec(str);
console.log(result); // ["Hello"],返回匹配的数组// 使用 match()
console.log(str.match(/Hello/)); // ["Hello"],返回匹配的数组// 使用 search()
console.log(str.search(/Hello/)); // 0,返回第一个匹配的位置// 使用 replace()
console.log(str.replace(/Hello/, "Hi")); // "Hi, World!",替换了 'Hello' 为 'Hi'

这些实例展示了如何使用JavaScript中的正则表达式来匹配和操作字符串。理解这些元字符和方法可以帮助你更有效地处理字符串操作。

二、正则表达式案例

1. 检查用户名格式

javascript"><script>
function checkUser(str) {// 模式var re = /^[a-zA-Z][a-zA-Z0-9_]{3,15}$/g;if (re.test(str)) {return '正确';} else {return '错误';}
}
console.log(checkUser('h111')); // 正确
console.log(checkUser('1h111')); // 错误
</script>

2. 检查邮箱格式

javascript"><script>
function checkEmail(str) {// 模式var re = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/g;if (re.test(str)) {return '正确';} else {return '错误';}
}
console.log(checkEmail('example@example.com')); // 正确
console.log(checkEmail('example@example')); // 错误
</script>

3. 检查电话号码格式(仅限数字)

javascript"><script>
function checkPhone(str) {// 模式var re = /^\d{10}$/g;if (re.test(str)) {return '正确';} else {return '错误';}
}
console.log(checkPhone('1234567890')); // 正确
console.log(checkPhone('123456789')); // 错误
</script>

4. 检查密码格式(至少一个大写字母、一个小写字母、一个数字、一个特殊字符,长度为8到20)

javascript"><script>
function checkPassword(str) {// 模式var re = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,20}$/g;if (re.test(str)) {return '正确';} else {return '错误';}
}
console.log(checkPassword('Password1!')); // 正确
console.log(checkPassword('password')); // 错误
</script>

5. 检查URL格式

javascript"><script>
function checkURL(str) {// 模式var re = /^(http|https):\/\/[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/g;if (re.test(str)) {return '正确';} else {return '错误';}
}
console.log(checkURL('http://example.com')); // 正确
console.log(checkURL('example.com')); // 错误
</script>

6. 检查日期格式(YYYY-MM-DD)

javascript"><script>
function checkDate(str) {// 模式var re = /^\d{4}-\d{2}-\d{2}$/g;if (re.test(str)) {return '正确';} else {return '错误';}
}
console.log(checkDate('2024-10-07')); // 正确
console.log(checkDate('2024-10-7')); // 错误
</script>

7. 检查IP地址格式

javascript"><script>
function checkIP(str) {// 模式var re = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/g;if (re.test(str)) {// 进一步检查每个部分是否在0到255之间var parts = str.split('.');if (parts.every(part => part >= 0 && part <= 255)) {return '正确';} else {return '错误';}} else {return '错误';}
}
console.log(checkIP('192.168.1.1')); // 正确
console.log(checkIP('192.168.1')); // 错误
console.log(checkIP('256.168.1.1')); // 错误
</script>

http://www.ppmy.cn/devtools/124116.html

相关文章

音视频入门基础:FLV专题(14)——FFmpeg源码中,解码Script Tag的实现

一、引言 在《音视频入门基础&#xff1a;FLV专题&#xff08;9&#xff09;——Script Tag简介》中对Script Tag进行了简介&#xff0c;本文讲述FFmpeg源码中是怎样解码FLV文件的Script Tag&#xff0c;拿到里面的信息。 二、flv_read_packet函数 从《音视频入门基础&#x…

基于STM32 ARM+FPGA+AD的电能质量分析仪方案设计(一)软件设计

电能质量分析系统核心算法及软件设计 4.1 电能质量分析系统软件结构 电能质量分析系统工作流程如下&#xff1a;系统上电后&#xff0c; ARM 和 FPGA 进行初始化 配置&#xff0c;随后与上位机建立连接并进行参数设置&#xff0c;将参数传输到 ARM 上&#xff0c; ARM…

【D3.js in Action 3 精译_030】3.5 给 D3 条形图加注图表标签(下):Krisztina Szűcs 人物专访 + 3.6 本章小结

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可…

手撕数据结构 —— 单链表(C语言讲解)

目录 1.为什么要有链表 2.什么是链表 3.链表的分类 4.无头单向非循环链表的实现 SList.h中接口总览 具体实现 链表节点的定义 打印链表 申请结点 尾插 头插 尾删 头删 查找 在pos位置之前插入 在pos位置之后插入 删除pos位置 删除pos位置之后的值 5.完整代码…

C++设计模式——代理模式

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 文章目录 引言代理模式的定义代理模式的具体实现 引言 我们经常听到代理服务器「代理服务器是一个中间服务器&#xff0c;能够接收客户端的请求&#xff0c;并代表客户端向服务器发起请求&#xff0c;然后将服…

【Python】物流行业数据分析与可视化案例

一&#xff0c;前言 在本文中&#xff0c;我将使用python语言基于Jupyter notebook对这一份物流行业数据集进行多维度数据分析&#xff0c;文章内容参考自b站马士兵《数据分析五大经典实战项目》教学视频&#xff0c;并对其中一些操作做出优化。 数据集下载地址&#xff1a;物流…

JS 怎么监听复制事件 并获取复制内容 并修改复制文本内容

需求背景&#xff1a; 需要禁用部分文本内容的复制事件&#xff0c;并且在复制事件发生时&#xff0c;将复制的文本内容通过接口传给后端。 上代码&#xff1a; // 使用Dom获取需要操作禁用时间的元素let element: any document.getElementById(test1);// 为该元素添加 copy 事…

基础【前端】面试题

css 1.BFC是什么&#xff1f; 1.块级格式化上下文&#xff0c;也就是说是一个独立的渲染空间&#xff0c;与外部区域毫不相干&#xff1b; 2.属于同一个bfc里面的相邻两个元素的margin会发生重叠&#xff1b;2.清除浮动有哪些&#xff1f; 1.使用BFC格式&#xff08;块级格式…