正则表达式

2023-09-18 17:12:05

正则表达式

参考文章 @CUGGZ
参考文章 @轩陌

声明一个正则表达式

字面量声明

const rex = /pattern/;

构造函数声明

const rex = new RegExp(pattern);

匹配模式

字符集合

[] 可以匹配中括号中包含的任意字符
比如 想要匹配 bt ct

let rex = /[bc]t/g;

let string = "actionbatbtctat";

console.log(string.match(rex)); // [ 'ct', 'bt', 'ct' ]

拓展

[a-z] 从小写a-z
[A-Z] 大写A-Z
[0-9] 0-9
[^a] 除了a以外的

符号范围:[#$%&@];
混合范围:[a-zA-Z0-9],匹配所有数字、大小写字母中的任意字符。

量词

{} 规定一个规则匹配多少次

let rex = /[a-z]{2}/g;

let string = "actionbbatbcctctat";

console.log(string.match(rex)); // [ 'ac', 'ti', 'on', 'bb', 'at', 'bc', 'ct', 'ct', 'at' ]

拓展

{3} 出现次数为最多3{1,4} 1 <= 出现次数 <= 4
{1,} 最少出现1次,简写 +
{0,} 至少0次,简写*
{0,1} 最少0次,最多1次,简写?

元字符

\d:相当于[0-9],匹配任意数字;
\D:相当于[^0-9];
\w:相当于[0-9a-zA-Z],匹配任意数字、大小写字母和下划线;
\W:相当于:[^0-9a-zA-Z];
\s:相当于[\t\v\n\r\f],匹配任意空白符,包括空格,水平制表符\t,垂直制表符\v,换行符\n,回车符\r,换页符\f;
\S:相当于[^\t\v\n\r\f],表示非空白符。

特殊字符

.:匹配除了换行符之外的任何单个字符;
\:将下一个字符标记为特殊字符、或原义字符、或向后引用、或八进制转义符;
|:逻辑或操作符;
[^]:取非,匹配未包含的任意字符。

位置匹配

\b:匹配一个单词边界,也就是指单词和空格间的位置;
\B:匹配非单词边界;
^:匹配开头,在多行匹配中匹配行开头;
$:匹配结尾,在多行匹配中匹配行结尾;
(?=p):匹配 p 前面的位置;
(?!=p):匹配不是 p 前面的位置。

修饰符

g:表示全局模式,即运用于所有字符串;
i:表示不区分大小写,即匹配时忽略字符串的大小写;
m:表示多行模式,强制 $ 和 ^ 分别匹配每个换行符。

实例方法

test() 和 exec()

test() : 检测一个字符串中是否包含 正则表单式的内容. 包含 返回true, 不包含 返回 false.

const regex1 = /a/gi;
const regex2 = /hello/gi;
const str = "Action speak louder than words";

console.log(regex1.test(str)); // true
console.log(regex2.test(str)); // false

exec() : 将字符串中符合正则表达式的内容 返回一个数组,如果没有匹配到内容则返回null.

const regex1 = /a/gi;
const regex2 = /hello/gi;
const str = "Action speak louder than words";

console.log(regex1.exec(str)); // ['A', index: 0, input: 'Action speak louder than words', groups: undefined]
console.log(regex2.exec(str)); // null

字符串方法

search()

用于查找 与正则表达式匹配的内容,并返回其索引.
注意: 1. 只能匹配到第一个 2. 匹配不到的会返回-1

const regex1 = /a/gi;
const regex2 = /p/gi;
const regex3 = /m/gi;
const str = "Action speak louder than words";

console.log(str.search(regex1)); // 输出结果:0
console.log(str.search(regex2)); // 输出结果:8
console.log(str.search(regex3)); // 输出结果:-1

match()

将匹配到的内容 以数组的形式返回.
注意:1. 如果添加了 g 修饰符,可以将所有匹配到的内容放在一个数组中返回 ,没添加的话只会返回第一个匹配到的内容 2. 匹配不到的话 会返回一个 null

const regex1 = /a/gi;
const regex2 = /a/i;
const regex3 = /m/gi;
const str = "Action speak louder than words";

console.log(str.match(regex1)); // 输出结果:['A', 'a', 'a']
console.log(str.match(regex2)); // 输出结果:['A', index: 0, input: 'Action speak louder than words', groups: undefined]
console.log(str.match(regex3)); // 输出结果:null

replace()

用于将匹配到的内容 替换为其他内容

const regex = /a/g;
const str = "Action speak louder than words";

console.log(str.replace(regex, "A")); // 输出结果:Action speAk louder thAn words
更多推荐

batch norm 中 track_running_stats 的探索

ifself.track_running_stats:self.register_buffer('running_mean',torch.zeros(num_features,**factory_kwargs))self.register_buffer('running_var',torch.ones(num_feat

Linux(CentOS)安装msf

目录一、安装MSF1.1在线安装1.2离线安装二、安装Postgresql数据库一、安装MSF1.1在线安装需要挂梯子!挂完梯子需要reboot重启,多试几次就可以,国内网络我试了很久都不行。没条件没梯子的看1.2离线安装cd/optcurlhttps://raw.githubusercontent.com/rapid

【Docker】了解和使用Docker

文章底部有投票活动,赶快参与进来吧😃相信大家在开发过程中都听说过Docker一词,至于Docker在开发中扮演的角色,估计好多人都说不上来,今天就让阿Q带大家一起揭开它神秘的面纱!文章目录什么是容器?容器的优点什么是Docker?Docker思想为什么要用Docker?容器VS虚拟机Docker中的基本概念镜像(Im

Reinforcement Learning(二)--on-policy和off-policy

1.前言强化学习(Reinforcementlearning,RL)是机器学习的一个分析,特点是概念多、公式多、入门门槛高🥲(别问我怎么知道的)。本篇文章着重讲解RL最重要的概念之一,即on-policy和off-policy,这2个概念极易与online和offline混淆,为体现文章的独立性,online和off

openGauss Meetup(杭州站)全程精彩回顾

9月16日,由云和恩墨、图尔兹、浙江鲲鹏、openGauss社区联合主办的“openGaussMeetup(杭州站)”活动在杭州市拱墅区中国智慧信息产业园成功举办,此次活动邀请到众多业内技术专家,与行业同仁一起探讨数据库技术创新与未来发展,助力企业数字化转型发展。出席此次活动的领导和嘉宾有图尔兹创始人&总经理陈邦义、o

16个图像分类方向开源数据集资源汇总(附下载链接)

FruitNet水果分类/识别数据集下载链接:http://suo.nz/2Cfo4y需要高质量的水果图像来解决水果分类和识别问题。要构建机器学习模型,整洁干净的数据集是基本要求。为了这个目标,我们创建了名为“FruitNet”的六种流行印度水果的数据集。该数据集包含6种不同类别水果的14700多张经过处理的格式的高质

LGA封装芯片焊接失效

NO.1案例背景某摄像头模组,在生产测试过程中发生功能不良失效,经过初步的分析,判断可能是LGA封装主芯片异常。NO.2分析过程#1X-ray分析【样品#1】【样品#2】测试结果:两个失效样品LGA焊接未发现明显异常。#2染色分析测试结果:样品1将LGA染色试验剥离后,发现焊点多数存在锡量较少的现象,焊接面积小;少数呈

解锁网络世界的利器:代理IP与Socks5代理

随着跨界电商、爬虫、网络安全和游戏等领域的不断发展,网络工程师们正面临着越来越多的挑战和机会。在这个信息爆炸的时代,如何更有效地访问、保护和探索网络资源成为了网络工程师们的首要任务。本文将重点介绍代理IP和Socks5代理,它们是网络世界的利器,为网络工程师提供了强大的工具来应对各种技术挑战。代理IP的妙用代理IP是一

爱分析《商业智能最佳实践案例》

近日,国内知名数字化市场研究咨询机构爱分析发布《2023爱分析·商业智能最佳实践案例》,此评选活动面向落地商业智能的各行企业和商业智能厂商,以第三方专业视角深入调研,评选出具有参考价值的创新案例。永达汽车集团与数聚股份合作的数字化智能运营管理平台项目,凭借突出的实践领先性与案例创新性,作为商业智能典型案例实力入选本次报

Android 插件开发框架 总结

1)类转载器ClassLoader:标准的javaSDK中有ClassLoader类,ClassLoader加载类的方式常称为双亲委托,ClassLoader.java具体代码如下:protectedClass<?>loadClass(StringclassName,booleanresolve)throwsClass

物联网的未来:连接的智能世界

物联网(IoT)是引领我们走向未来的一项关键技术。它让物品通过互联网进行连接,交流,开创了智能生活新时代。预计到2025年,全球将拥有超过410亿的IoT设备。在对人类生活的每个方面产生影响的同时,物联网也正在为经济增长、社会进步和环境可持续性开创新的可能性。物联网的最大优势在于其无所不在的连通性。从智能家居到工业自动

热文推荐