(详细介绍)正则表达式笔记-通俗易懂

一、概念

又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。(来自百度百科)

个人理解:regex就是一种描述,我更喜欢理解为自定义公式,满足该公式的字符串能够被筛选出来。

正则表达式练习网站:https://c.runoob.com/front-end/854/

二、正则表达式语法

普通字符:包括所有大写和小写字母、所有数字、所有标点符  号和一些其他符号

例子

普通字符含义
[… ]字符组格式,默认必须从字符组中选一个字符,[]匹配中括号内列举的字符
[ABC]表示这个字符可以是A或B或C,只要字符串中有A或B或C都可匹配出来
[a-z]这个字符是a到z中任意一个字符
[a-zA-Z0-9]这个字符是a到z A到Z 0到9中的任意字符
[^abc]^字符在[ ]中括号里面可以理解为排除,意思是除了abc三个字符,可匹配其他任意字符
预定义字符:匹配单个字符含义
.匹配任意字符,除了换行符\n
\d匹配数字digit
\D大写的表示取反,匹配非数字
\w匹配字母或数字或下划线
\W大写表示取反,匹配非字母或数字或下划线
\s匹配任意空白符space,包括换行\n
\S大写表示取反,匹配非空白符,不包括换行\n
\n匹配一个换行符
\t匹配一个制表符
量词(限定符)含义
匹配前面的子表达式0次或1次,或指明一个非贪婪限定符
+匹配前面的子表达式1次或多次
*匹配前面的子表达式0次或多次,即任意次
{n}匹配前面的子表达式n次
{n,}匹配前面的子表达式至少出现n次
{n,m}匹配前面的子表达式出现n到m次
.* .+贪婪模式匹配
.*? .+?非贪婪模式匹配
定位符含义
^匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 \n 或 \r 之后的位置匹配
$匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 \n 或 \r 之前的位置匹配
\b匹配一个单词边界,即字与空格间的位置
\B非单词边界匹配
注意1:量词和定位符不可写一块 如 ^* 就是错的 2: ^不要和中括号[]中的 ^ 语法混淆

定位符例子
/ter\b/ 表示在单词结尾边界处匹配ter
/\bter/ 表示在单词开头边界处匹配ter
/\Bter/ 表示在单词中间部分匹配ter

分组含义
(exp)捕获分组,里面exp是正则表达式,系统会分配组号,并可通过组号引用该分组
(?:exp)不捕获分组,可匹配,但没有组号,不可引用
(?P<name>exp)命名分组,这是python中的写法,js中是 (?<name>)
\<name>和\n可通过这两个方式引用分组,n是组号1,2…,name是自己命名的组名,注意js中是通过$n来引用分组的

正则表达式的先行断言lookhead和后行断言lookbehindd的四种形式

1:(?=pattern) 正向先行断言
2:(?!pattern)负向先行断言
3:(?<=pattern) 正向后行断言
4:(?<!pattern)负向后行断言
个人理解
1:这里的断言可以理解为位置跟^,$,\b这些定位符的作用有些相似,根据pattern模式找到位置,然后……嗯……我还是举例子吧。
例如字符串 helloworldhello
正则表达式
/hello(?=world)/的意思就是 匹配右侧位置是world的hello,
/hello(?!world)/的意思是 匹配右侧位置不是world的hello,
/(?<=world)hello/的意思是 匹配左侧位置是world的helllo,
/(?<!world)hello/的意思是 匹配左侧位置不是world的hello
2:关于先行和后行概念
可以简单的认为 从左到右的方向就是先行,从右往左的方向就是后行(?<=)和(?<!)中的<意思就是后行,从右往左的方向。
(当然先行和后行实际意思涉及到字符串匹配原理的问题,想弄清楚的可自行百度(手动doge))

正则表达式修饰符(标记)

概念

修饰符也称为标记,正则表达式的修饰符用于指定额外的匹配策略。
修饰符不写在正则表达式里,而是位于表达式之外,格式如下:
/pattern/flags

常用修饰符

修饰符含义
iignore缩写,意思是忽略大小写的差异,匹配时不区分大小写,A和a一样
gglobal缩写,全局匹配,查找所有的匹配项
mmulti line缩写,多行匹配
s特殊字符圆点 . 中包含换行符 \n,默认情况下的圆点 . 是匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后, . 中包含换行符 \n。

额外补充

| 字符为替换,“或"操作字符具有高于替换运算符的优先级,使得"m|food"匹配"m"或"food”。若要匹配"mood"或"food",请使用括号创建子表达式,从而产生"(m|f)ood"。
Alt

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值