正则表达式

正则表达式构造函数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, '');
相关推荐
masa0104 分钟前
JavaScript--JavaScript基础
开发语言·javascript
她似晚风般温柔7897 小时前
Uniapp + Vue3 + Vite +Uview + Pinia 分商家实现购物车功能(最新附源码保姆级)
开发语言·javascript·uni-app
Jiaberrr8 小时前
前端实战:使用JS和Canvas实现运算图形验证码(uniapp、微信小程序同样可用)
前端·javascript·vue.js·微信小程序·uni-app
everyStudy8 小时前
JS中判断字符串中是否包含指定字符
开发语言·前端·javascript
Ylucius8 小时前
动态语言? 静态语言? ------区别何在?java,js,c,c++,python分给是静态or动态语言?
java·c语言·javascript·c++·python·学习
200不是二百8 小时前
Vuex详解
前端·javascript·vue.js
LvManBa9 小时前
Vue学习记录之三(ref全家桶)
javascript·vue.js·学习
深情废杨杨9 小时前
前端vue-父传子
前端·javascript·vue.js
司篂篂10 小时前
axios二次封装
前端·javascript·vue.js
姚*鸿的博客11 小时前
pinia在vue3中的使用
前端·javascript·vue.js