JavaScript-正则表达式方法(RegExp)

embedded/2025/1/18 10:33:12/

RegExp 对象用于将文本与一个模式匹配。

有两种方法可以创建一个 RegExp 对象:一种是字面量,另一种是构造函数。

字面量由斜杠 (/) 包围而不是引号包围。

构造函数的字符串参数由引号而不是斜杠包围。

new RegExp(pattern[, flags])

一.符集合

1.选择符(|,&)

类似逻辑运算符

2.转义字符(\)

注意需要转义的字符 ,比如后文提及到的元字符也可以这样理解 :d为普通字符 /d 将其转义为元字符使用 .为回车或换行外的任意字符 /.转义为普通字符

在正则中主要存在这些特殊字符:*,+,?,$,^,.,|,\,(,),{,},[,]

 注意:创建正则表达式的时候,构造函数方法需要多转义一次或者直接设置字面量传入。

3.边界约束符(^,$)
字符等价类
^以xxx开始
$以xxx结束
\b单词边界
\B非单词边界

4.普通元字符

d:digit s:space w:word

字符等价类含义
.[^\r\n]除了回车符和换行符之外的所有字符
\d[0-9]数字字符
\D[^0-9]非数字字符
\s[\t\n\x0B\f\r]空白符
\S[^\t\n\x0B\f\r]非空白符
\w[a-zA-Z_0-9]单词字符(字母、数字、下划线)
\W[^a-zA-Z_0-9]非单词字符
5.量词
字符含义
出现零次或一次(最多出现一次) 禁止贪婪
+出现一次或者多次(至少出现一次) 贪婪
*出现零次或者多次(任意次) 贪婪
{n}出现n次
{n,m}出现n到m次
{n,}至少出现n次 贪婪
6.原子表([ ],[^])

 [abcd] 包含其中一个即可 [] 实际代表的就是 一位字符

 [^abcd] 只要不是他们四个中的一个即可 [^] 实际代表的就是 一位字符

在原子表中的有些元字符无作用,只会是普通字符,例如 .

匹配所有字符:[\s\S]   [\d\D]   [\w\W]   [^]

let str='dekwjfih4c89fh8h87890@@@##$$1'

console.log(str.match(/[^]+/))

console.log(str.match(/[\s\S]+/))

console.log(str.match(/[\d\D]+/))

console.log(str.match(/[\w\W]+/))

7.原子组  ( ( ),( ?:))
①捕获组:( )

举个例子:

let test=`

<h1>

    henry

</h1>

<h2>man</h2>

正常情况下,我们这样提取:

let reg=/<h[1-6]>[\s\S]*</h[1-6]>/ 

但是发现h[1-6]重复 那么我们可以把它作为一个"组"

模式中的 \1 和 \2 表示第一个和第二个被捕获括号匹配的子字符串,而在正则表达式的替换环节,则要使用像 $1$2、...、$n 这样的语法。$&为当前匹配项,$'为匹配项左边的内容,$`为匹配项右边的内容。

此时后面的h[1-6]我们就可以利用“1”这个组获取

let reg=/<(h[1-6])>[\s\S]*<\/\1>/

利用函数:

无论哪种方式,0为整个内容

练习:验证邮箱

let reg=/^[\w-]+@([\w-]+\.)+(com|net|cn)$/i

②非捕获组:(?:) 

③原子组别名 (?< >)

数字可以利用?<>创建别名

例如/?<h>(h[1-6])/     获取:$<h>即可

8.模式匹配标记(g,i,m,y,u,s)

g和y的区别:

g会跳过不满足的字符,而y只要遇到不满足就停止了

练习:

将下列内容转换为['name','price']输出(跳过非水果类)

    let goods=`

    #1 apple,200元 #

    #2 banana,300元 #

    #3 tool   #工具

    #4 pear,500元 #

    `

9.断言匹配 (?<=,?=) 

其实可以理解类似为条件语句 ?<=为判断前面的条件 (?<!则为后面不是) ?=为后面 (?!则为后面不是)

例如:把前面有hello的Jack改为jack

二.实例方法

1.RegExp.prototype.test()

test() 方法执行一个检索,用来查看正则表达式与指定的字符串是否匹配。返回 true 或 false。

2.RegExp.prototype.exec()

exec() 方法在一个指定字符串中执行一个搜索匹配。返回一个结果数组或 null。

和String的match方法对比:

exec方法使得利用g修正符仍能看到字符属性 这是利用了RegExp.lastIndex这个实例属性。

3.RegExp.prototype.toString()

toString() 返回一个表示该正则表达式的字符串。

4.RegExp.prototype[Symbol.xx]()

支持正则表达式的 String 对象的方法有:

  • search: 检索与正则表达式相匹配的值
  • match: 找到一个或多个正则表达式的匹配。
  • matchAll: 找到一个或多个正则表达式的匹配。(baselin-2020)-相当于match的迭代器版本
  • replace: 替换与正则表达式匹配的子串。
  • split: 把字符串分割为字符串数组。

三.实例属性

1.RegExp.lastIndex()

lastIndex 是正则表达式的一个可读可写的整型属性,用来指定下一次匹配的起始索引。

正则的两大特性

1.懒惰
正常捕获字符串的时候, 每次都从下标0开始
解决方式: 给正则添加一个修饰符 g
2.贪婪
每次在捕获的时候, 会尽可能的多捕获一些东西(*,+)
解决方法: 在原有的修饰符后添加一个 ? 然后相当于开启非贪婪模式

正则的一些实用

1.批量校验正则

利用Array的实例方法:

const password='123enrY'

let regs=[/^[a-z0-9]{5,10}$/i,/[A-Z]/]

let state=regs.every(item=>item.test(password))

console.log(state?'正确':'错误')

2.封装全局匹配:

    function serach(string,reg){

        while(res=reg.exec(string)){

            result.push(res)

        }

    }


http://www.ppmy.cn/embedded/154918.html

相关文章

VS Code--常用的插件

原文网址&#xff1a;VS Code--常用的插件_IT利刃出鞘的博客-CSDN博客 简介 本文介绍VS Code&#xff08;Visual Studio Code&#xff09;常用的插件。 插件的配置 默认情况下&#xff0c;插件会放到这里&#xff1a;C:\Users\xxx\.vscode\extensions 修改插件位置的方法 …

【Kotlin】上手学习之控制流程篇

二、控制流程 2.1 条件与循环 2.1.1 if 表达式 在 Kotlin 中&#xff0c;if 是一个表达式&#xff1a;它会返回一个值。 因此就不需要三元运算符&#xff08;条件 ? 然后 : 否则&#xff09;&#xff0c;因为普通的 if 就能胜任这个角色。 fun main() {val a 2val b 3va…

[Qt]常用控件介绍-多元素控件-QListWidget、QTableWidget、QQTreeWidget

目录 1.多元素控件介绍 2.ListWidget控件 属性 核心方法 核心信号 细节 Demo&#xff1a;编辑日程 3.TableWidget控件 核心方法 QTableWidgetItem核心信号 QTableWidgetItem核心方法 细节 Demo&#xff1a;编辑学生信息 4.TreeWidget控件 核心方法 核心信号…

docker-compose和docker-harbor

docker-compose 自动编排工具&#xff0c;可根据dockerfile自动化部署docker容器 yaml文件格式&#xff0c;注意缩进 docker-harbor 私有仓库 公有云------阿里云&#xff0c;腾讯云 私有云------docker仓库 仓库--------保存镜像的地址 Harbor是vmware公司做的docker仓库的…

Java进阶-在Ubuntu上部署SpringBoot应用

随着云计算和容器化技术的普及&#xff0c;Linux 服务器已成为部署 Web 应用程序的主流平台之一。Java 作为一种跨平台的编程语言&#xff0c;具有广泛的应用场景。本文将详细介绍如何在 Ubuntu 服务器上部署 Java 应用&#xff0c;包括环境准备、应用发布、配置反向代理&#…

Python毕业设计选题:基于django+vue的疫情数据可视化分析系统

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 用户管理 员工管理 疫情信息管理 检测预约管理 检测结果…

机器学习(3):逻辑回归

1 介绍 逻辑回归&#xff08;Logistic Regression&#xff09;是一种广泛应用于分类问题的监督学习算法。尽管名字中含有“回归”二字&#xff0c;但这并不意味着它用于解决回归问题。相反&#xff0c;逻辑回归专注于解决二元或多元分类问题&#xff0c;如邮件是垃圾邮件还是非…

量子计算将彻底改变商业分析

虽然量子计算听起来颇具未来感&#xff0c;但这项技术正迅速走向成熟 —— 就如同 ChatGPT 这类人工智能&#xff08;AI&#xff09;工具一样。我相信&#xff0c;量子计算技术所产生的连锁反应很快就会对业务分析领域产生巨大影响。 什么是量子计算&#xff1f; 尽管名字听起…