JS正则表达式总结

本说对正则还是有点认识,基本上简单的自己还能摸索出来,最近看了高性能JavaScript以后,发现对正则的正式还是如此的浅薄,先不说深入,把基础的先记录下来再说。

1、元字符标记

(1)、字符对应马甲

字符等同于描述
.[^\n\r]除了换行和回车之外的任意字符
\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]非单词字符
这个从司徒大神博客上摘下来的   这里说明的是 匹配所有的字符串[\s\S]

(2)、特殊字符

字符正则描述
\t/\t/制表符
\n/\n/制表符
\r/\r/回车符
\f/\f/换页符
\a/\a/alert字符
\e/\e/escape字符
\cX/\cX/与X相对应的控制字符
\b/\b/与回退字符
\v/\v/垂直制表符
\0/\0/空字符
这里照旧搬上司徒大神总结的表格

(3)、量词

代码类型描述
?软性量词出现零次或一次
*软性量词出现零次或多次(任意次)
+软性量词出现一次或多次(至道一次)
{n}硬性量词对应零次或者n次
{n,m}软性量词至少出现n次但不超过m次
{n,}软性量词至少出现n次(+的升级版)
照旧照搬

这里就出现了难点,因为回溯就出现在这里,贪婪跟惰性匹配也在这里。

回溯先不谈,先来说贪婪跟惰性。

贪婪就是一次性匹配完整个字符,如果不符合或者后面继续有字符需要匹配,然后它很不情愿的吐出一个字符,来试着匹配,如果不适合,继续吐出第二个。

惰性就是一次之匹配这个字符串后的一个字符,如果这个字符不匹配,接着匹配这个字符串的下一个字符。

经典例子:

var str = '1234ing1234ing1234';
	var re1 = /.*ing/g;//贪婪
    var re2 = /.*?ing/g;//惰性
	alert(str.match(re1)+"");//1234ing1234ing
	alert(str.match(re2)+"");//1234ing,1234ing

关于回溯具体也举不到实例,有好的实例拿出来,一切就好说了。

(4)、边界

边界
正则名称描述
^开头注意不能紧跟于左中括号的后面
$结尾 
\b单词边界指[a-zA-Z_0-9]之外的字符
\B非单词边界 
(5)、元字符

( [ { \ ^ $ | ) ? * + .这几个字符是正则表达式一部分,在匹配这些字符时,需要转义。

(6)、分组

1、分组

到目前为止,我们只能一个字符到匹配,虽然量词的出现,能帮助我们处理一排密紧密相连的同类型字符。但这是不够的,下面该轮到小括号出场了,中括号表示范围内选择,大括号表示重复次数。小括号允许我们重复多个字符。

2、反向引用

反向引用标识由正则表达式中的匹配组捕获的子字符串。每个反向引用都由一个编号或名称来标识,并通过“\编号”表示法进行引用。

3、候选

在分组中插入管道符(“|”),把它划分为两个或多个候多项。

4、非捕获分组

并不是所有分组都能创建反向引用,有一种特别的分组称之为非捕获性分组,它是不会创建反向引用。反之,就是捕获性分组。要创建一个非捕获性分组,只要在分组的左括号的后面紧跟一个问号与冒号就行了。

5、前瞻

前瞻与后瞻其实都属于零宽断言,但javascript不支持后瞻。

零宽断言
正则名称描述
(?=exp)正向前瞻匹配exp前面的位置
(?!exp)负向前瞻匹配后面不是exp的位置
(?<=exp)正向后瞻匹配exp后面的位置不支持
(?<!exp)负向后瞻匹配前面不是exp的位置不支持

(7)、字符集合

通过[]的方式来达到字符集合的方式。

例如[\s\S]任意字符[0-9]数字[a-zA-Z]大小写字符[\u4e00-\u9fa5]中文字符等等

(8)、标志

正则表达式的匹配模式支持下列3个标志:
    1)g:表示全局(global)模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止;
    2)i:表示不区分大小写(case-insensitive)模式,即在确定匹配项时忽略模式与字符串的大小写;
    3)m:表示多行模式(multiline),即在到达一行文本末尾时还会继续查找下一行中是否存在于模式匹配的项;
2、正则表达式的相关方法与属性

3、稍微复杂的正则表达式的例子


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值