正则表达式语法

内容参考:JavaScript权威指南

1.修饰符

修饰符是放在"/"符号之外的

字符含义
i执行不区分大小写的匹配
g执行一个全局匹配(默认的是找到第一个即停止)
m多行匹配模式,此模式下,^匹配行首,$匹配行尾

2.直接量匹配

字符匹配
字母/数字自身
\t制表符
\n换行符

2.字符类匹配[]

字符匹配
[…]方括号内的任意字符
[^…]不在方括号内的任意字符
.除换行符和其他Unicode行终止符之外的任意字符
\d等价于[0-9]
\D等价于[^0-9]
\w等价于[a-zA-Z0-9]
\W等价于[^a-zA-Z0-9]
\s任何Unicode空白符
\S任何非Unicode空白符的字符
[\b]退格直接量

3.重复匹配{}

字符含义
{n}匹配前一项n次
{n,}匹配前一项至少n次
{n,m}匹配前一项 [n,m] 次
等价于{0,1}
+等价于{1,}
*等价于{0,}
/\s+java\s+/	匹配前后带有一个或多个空格的字符串'java'
非贪婪的重复匹配
  • 先看如下示例
1.输入:aaa 		规则:/a+/ 			输出:aaa 	匹配到第一个a即满足匹配规则,但它会继续往下尝试匹配(贪婪),输出aaa
2.输入:aaa 		规则:/a+?/ 			输出:a  	匹配到第一个a即满足匹配规则,匹配结束(一个就饱了,不贪婪),输出第一个a
3.输入:aaab 	规则:/a+b/ 			输出:aaab	
4.输入:aaab 	规则:/a+?b/ 		输出:aaab	匹配到第一个a而后寻找到b后才满足匹配规则,和例3一样,输出第一个匹配结果aaab。
5.输入:aaabb 	规则:/a+b+?/ 		输出:aaabb	
6.输入:aaabb 	规则:/a+b+?/ 		输出:aaab	匹配到aaab后满足规则,不向后贪婪匹配那个b,输出aaab
结论:在没有匹配成功前,无所谓贪婪不贪婪,也即非贪婪的重复匹配符号得放在正则表达式末尾才有意义。

5.位置匹配

字符含义
^匹配开头
$匹配结尾
\b匹配一个单词的边界(\w与\W之间的位置或字符\w和字符串开头/结尾之间的位置)
\B匹配非单词边界的位置

6.选择、分组和引用

字符含义
|选择,匹配的是该符号左边的子表达式或右边的子表达式
(pattern) / (?:pattern)捕获 / 非分组,将几个项组合为一个单元,该部分记录 / 不记录引用(引用项,后续可以使用 \数字方式引用结果)
(?=pattern)、(?<=pattern)正 / 反向肯定预查,匹配以pattern开头 / 结尾的正则,该部分不会出现在匹配结果中,不记录引用
(?!pattern)、(?<!pattern)正 / 反向否定预查,匹配不以pattern开头/结尾的正则,该部分不会出现在匹配结果中,不记录引用
  • 案例看细节
1.输入:abcb				规则:/(a(b))(c)\2/			输出:abcb				1证:引用的位置是参与计数的左括号的位置,(?:xxx)分组用的左括号不计
2.输入:' a " b " ' 		规则:/['"][^'"]*['"]/		输出:' a "
3.输入:' a " b " ' 		规则:/(['"])[^'"]*\1/		输出:' a " b " ' 		23证:引用的是正则表达式模式匹配后的文本,不是正则表达式模式。
4.输入:' a " b " ' 		规则:/(['"])[^\1]*\1/		输出:错误(此种引用不能在字符类中使用)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值