正则表达式

正则表达式构造函数RegExp()和正则表达式字面量的主要区别在于语法和使用方式。

正则表达式构造函数RegExp()

  • 使用字符串作为参数,需要进行双重转义,即需要使用双反斜杠来表示特殊字符,如 \\d 表示数字, \\w 表示字母下划线等。
  • 构造函数的参数可以是一个字符串,也可以是两个字符串,第一个字符串是正则表达式模式,第二个字符串是修饰符。
  • 如果正则表达式模式是一个变量,只能使用构造函数的方式创建正则表达式。

正则表达字面量 // (是左边一个 / 右边一个 / 将表达式包围起来)

  • 使用两个斜杠将正则表达式包围起来。
  • 字面量的方式更简洁,不需要进行双重转移,直接使用特殊字符即可。
  • 正则表达式字面量的模式和修饰符直接写在斜杠之间是一样的。

以下是等价的:

复制代码
var re = new RegExp("\\w+");
var re = /\w+/;

1.基本语法

正则表达式是由字符和特殊字符组成的模式,用于匹配字符串中的文本。

常见的特殊字符包括元字符(如 . , * , + , ? 等)和字符类(如 ... , \^... , \d , \w 等)

2.匹配模式

使用正则表达式可以进行文本匹配,查找,替换等操作。

匹配模式可以包括固定文本和通配符,用于定义要匹配的模式。

量词(如 *,+,?,{n},{n,m} 等)用于指定匹配的次数、

3.常见的正则表达式应用场景

**邮箱验证:**匹配邮箱的正则表达式可以验证邮箱的合法性。

**密码验证:**通过正则表达式可以验证密码的复杂度要求。

**⼿机号验证:**使⽤正则表达式可以验证⼿机号码的格式是否正确。

**URL 提取:**通过正则表达式可以从⽂本中提取出符合 URL 格式的链接。

**HTML 标签处理:**正则表达式可以⽤于匹配和处理 HTML 标签。

**字符串替换:**使⽤正则表达式可以进⾏字符串的替换操作。

4.常见的正则表达式方法

test() :测试字符串是否匹配正则表达式。

exec() :在字符串中查找匹配的⽂本,并返回匹配结果。

match() :在字符串中查找匹配的⽂本,并返回所有匹配结果的数组。

search() :在字符串中查找匹配的⽂本,并返回第⼀个匹配结果的索引。

replace() :将匹配的⽂本替换为指定的字符串。

split() :根据正则表达式将字符串拆分为数组。

javascript 复制代码
// 示例字符串
const str = 'Hello, World! This is a test string.';

// test(): 测试字符串是否匹配正则表达式
const regex1 = /test/;
console.log(regex1.test(str)); // true

// exec(): 在字符串中查找匹配的⽂本,并返回匹配结果
const regex2 = /is/g;
let result;
while ((result = regex2.exec(str)) !== null) {
 console.log(result[0]); // "is" (每次循环匹配的结果)
 console.log(result.index); // 匹配的起始索引
}

// match(): 在字符串中查找匹配的⽂本,并返回所有匹配结果的数组
const regex3 = /o/g;
console.log(str.match(regex3)); // ["o", "o", "o"]

// search(): 在字符串中查找匹配的⽂本,并返回第⼀个匹配结果的索引
const regex4 = /World/;
console.log(str.search(regex4)); // 7

// replace(): 将匹配的⽂本替换为指定的字符串
const regex5 = /test/;
const newStr = str.replace(regex5, 'replacement');
console.log(newStr); // "Hello, World! This is a replacement string."

// split(): 根据正则表达式将字符串拆分为数组
const regex6 = /[,!\s]/;
const arr = str.split(regex6);
console.log(arr); // ["Hello", "World", "This", "is", "a", "test", "string"]

5.贪婪匹配和非贪婪匹配

贪婪匹配是指正则表达式默认匹配尽可能长的字符串

非贪婪匹配是指正则表达式匹配尽可能短的字符串,在量词后面加上 ?实现非贪婪匹配。


常⻅的正则表达式⾯试题考点

1. 什么是正则表达式?

正则表达式是⼀种⽤于匹配和操作 字符串的模式 ,它由字符和特殊字符 组成,⽤于定义匹配规则。

2. 正则表达式的创建⽅式有哪些?

正则表达式可以通过两种⽅式创建:

**字⾯量⽅式:**使⽤两个斜杠 // 将正则表达式包围起来,如: /pattern/ 。

**构造函数⽅式:**使⽤ RegExp() 构造函数创建,接受⼀个字符串参数,如: new RegExp("pattern") 。

3. 常⻅的正则表达式修饰符有哪些?

常⻅的正则表达式修饰符包括:

i:不区分⼤⼩写匹配。

g :全局匹配,找到所有匹配项。

m:多⾏匹配,将 ^ 和 $ 应⽤到每⼀⾏。

4. 常⽤的正则表达式元字符有哪些?

常⽤的正则表达式元字符包括:

.:匹配除换⾏符以外的任意字符。

^ :匹配字符串的开始位置。

$:匹配字符串的结束位置。

\d:匹配数字字符。

\w :匹配字⺟、数字、下划线。

\s :匹配空⽩字符。

5. 如何匹配邮箱地址?

javascript 复制代码
/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;

6. 如何匹配⼿机号码?

javascript 复制代码
/^1[3456789]\d{9}$/;

7. 如何匹配 URL 地址?

javascript 复制代码
/^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})(\/[\w.-]*)*\/?$/;

8. 如何提取字符串中的数字部分?

javascript 复制代码
/\d+/g;

9. 如何验证密码的复杂度要求?

例如:包括⾄少包含⼀个⼤写字⺟、⼀个⼩写字⺟和⼀个数字,⻓度为8-20个字符:

javascript 复制代码
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,20}$/;

10. 如何匹配⽇期格式(YYYY-MM-DD)?

如:YYYY-MM-DD

javascript 复制代码
/^\d{4}-\d{2}-\d{2}$/;

11. 如何匹配 IP 地址?

javascript 复制代码
/^((25[0-5]|2[0-4]\d|[01]?\d{1,2})\.){3}(25[0-5]|2[0-4]\d|[01]?\d{1,2})$/;

12. 如何匹配 HTML 标签?

javascript 复制代码
/<[^>]+>/g;

13. 如何移除字符串中的 HTML 标签?

javascript 复制代码
str.replace(/<[^>]+>/g, '');
相关推荐
霍营_托尼1 分钟前
微信小程序点餐项目实战:飞入动画、样式错位、弹窗不消失,7 个前端坑的完整排障记录
javascript·微信小程序·动效
Hilaku1 小时前
为什么我劝应届生不要去创业公司写前端?
前端·javascript·程序员
只愿云淡风清2 小时前
正则表达式学习笔记-01 正则表达式的来源
笔记·学习·正则表达式
晓得迷路了2 小时前
栗子前端技术周刊第 149 期 - Vite+ 1.0、Preact 11、Next.js 16.4...
前端·javascript·react.js
前端一小卒2 小时前
搜索 API 额度用完返回空数组,Agent 就开始一本正经地胡说
前端·javascript·node.js
w2sfot2 小时前
AI时代,JS加密还有效吗?
开发语言·前端·javascript
haluhalu.3 小时前
Agent = LLM + 上下文 + 工具(含观察 / 动作空间、ReAct 循环)
前端·javascript·人工智能·python·react.js·机器学习·个人开发
子兮曰8 小时前
把 649 种文件格式塞进一个网页里:一个「文件不出浏览器」的预览器
前端·javascript·后端
paopaokaka_luck11 小时前
基于springboot+vue的智慧家政管理系统(AI问答、 WebSocket实时沟通、ECharts运营分析、订单规则与服务追踪)
java·javascript·spring boot·数据分析·echarts·mybatis
溪语流沙12 小时前
【每天一个CSS | Day19】流光文字与一笔写成的手写签名
前端·javascript·css