正则表达式学习——(1)基础语法

参考文章:

https://www.zhihu.com/question/48219401/answer/1476436385

一、什么是正则表达式?

正则表达式(Regular Expression)是一种文本模式,其使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。这里的文本模式我理解成一种文本的一种标准格式,就像年月日格式的日期是yyyy-mm-dd

二、为什么使用正则表达式?

(1)验证:看看字符串是不是符合某个模式,比如用行用户名密码的验证。

(2)查找:从大量信息中快速提取指定内容,比如在一些ip中,查找指定ip。

(3)替换:将指定格式的文本进行正则匹配查找,找到之后进行特定替换或者删除。

三、字符匹配

正则表达式由普通字符和特殊字符(元字符,$,(),*,+,[,?,\,^,{,|)组成,其中普通字符包括没有显式指定为元字符的所有可打印(所有的大小写字母、数字、标点符号)和不可打印字符(\f,\n,\r,\s,\S,\t......)。

具体看:https://www.runoob.com/regexp/regexp-metachar.html

这里记几个感觉常用的:

符号意义
[^ABC]匹配除了 […] 中ABC的所有字符
\w匹配字母、数字、下划线
^不在[]里,代表匹配输入字符串的开始位置
$匹配输入字符串的结尾位置
\d一位数字
.匹配除换行符 \n 之外的任何字符
aa|bb匹配aa或bb

限定符

字符意义
?前面的字符最多只可以出现一次(0次、或1次
+前面的字符必须至少出现一次(1次或多次
*前面的字符可以不出现,也可以出现一次或者多次不那么久(0次、或1次、或多次
{n}匹配确定的 n 次
{n,}至少匹配n 次
{n,m}最少匹配 n 次且最多匹配 m 次

注意:不能将限定符与定位符(^,$,\b,\B)一起使用

*+限定符都是贪婪的,即会尽可能多的匹配文字,e.g.

var str = "abcd jrj@qq.comtest@runoob.com 1234";
var patt1 = /\b[\w.%+-]+@[\w.-]+\.[a-zA-Z]{2,6}\b/g;
document.write(str.match(patt1));
qq.comtest@runoob.com

只有在它们的后面加上一个? 就可以实现非贪婪最小匹配

四、组

1.捕获组&非捕获组

字符意义
()捕获组capture group,()会把相关匹配存储到一个临时缓冲区,所捕获的每个子匹配都按照在正则表达式模式中从左到右出现的顺序存储。缓冲区编号从 1 开始,最多可存储 99 个捕获的子表达式。每个缓冲区都可以使用 \n 访问(回溯引用backreference),其中 n 为一个标识特定缓冲区的一位或两位十进制数。
(?: )non-capturing group,不想让后面的选项的相关匹配被缓存

e.g.

img

\1匹配的是[1-6],\0是整个正则表达式

2.先行断言lookhead

字符意义
a(?=b)positive lookhead,先行断言,a只有在b前面才匹配
a(?!b)negative lookhead,先行否定断言,a只有不在b前面才匹配

3.后行断言lookbehind

字符意义
(?<=b)apositive lookbehind,后行断言,a只有在b后面才匹配
(?<!b)anegative lookbehind,后行否定断言,a只有不在b后面才匹配

五、修饰符

字符意义
i不区分大小写
g全局匹配
m多行匹配,使边界字符 ^$ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾。
s特殊字符圆点 . 中包含换行符 \n

e.g.

var str="google\nrunoob\ntaobao";
var n1=str.match(/google./);   // 没有使用 s,无法匹配\n
var n2=str.match(/google./s);  // 使用 s,匹配\n
document.write(str.match(n1));
document.write("<br>");
document.write(str.match(n2));

结果:

null
google

六、运算符优先级

img

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值