RegExp正则表达式

重难点
  • 贪婪模式
  • 非贪婪模式
  • 捕获性分组
  • 非捕获性分组
  • 正向前瞻
  • 负向前瞻
  • exec()
  • lastIndex
  • 特殊组合:?   ?:   ?=   ?!

元字符

正则表达式有两种基本字符类型组成
  • 原义文本字符
  • 元字符

元字符是在正则表达式中有特殊含义的非字母字符
* + ?¥ . | \ () {} []

字符类
[]  例   [abc]
字符类取反
[^] 例  [ ^ abc]

范围类
[a-z] [A-Z] [0-9]

预定于类
.等价于[^\r\n]
\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]
^以什么开头
$以什么结尾
\b单词边界
\B非单词边界

量词
? 出现0次或1次
+ 出现一次或多次
* 出现0次或多次
{n} 出现n次
{n,m} 出现n-m次
{n,} 至少出现n次

贪婪模式
正则表达式在匹配的时候默认尽可能多的匹配这种模式叫贪婪模式
非贪婪模式只需在量词后加上?即可

分组(也叫捕获性分组)
()()() $3 $3 $3
忽略分组(也叫非捕获性分组)
只需再分组中加上?:
(?:)在匹配的时候回自动忽略该分组中的内容

前瞻后顾
正则表达式从文本头部向尾部开始解析,文本尾部方向成为‘前’,文本头部方向成为‘尾’
前瞻就是在正则表达式匹配到规则的时候,向前检查是否符合断言,后顾或后瞻方向相反,js不支持后顾
符合前瞻断言的称为正向匹配,不符合前瞻断言的称为负向匹配
正向前瞻 exp(?=assert)
负向前瞻  exp(?!assert)

lastindex
当前匹配结果的最后一个字符的下一个字符
   
   
  1.     var reg1=/\w/;
  2.     var reg2=/\w/g;
  3.     while (reg2.test('ab')){
  4.         console.log(reg2.lastIndex);
  5.     }

解析:首先匹配到’a’,当前匹配结果的最后一个字符就是‘a’,’a’的下一个字符是’b’,’b’所在的位置是1 故能打印出1,然后接着匹配,匹配到‘b’,当前匹配结果的最后一个是‘b’,b的下一个字符是空,空字符所在的位置是2,再接着匹配,因为再往后就没有字符了所以匹配不到故放回false

exec
使用正则表达式模式对字符串执行搜索,并将更新全局RegExp对象的属性以反映匹配结果。如果没有匹配的文本则返回null,否则返回一个结果数组
index声明匹配文本的第一个字符的位置
input存放被检索的字符串string
RegExp.  exec ( str )

exec非全局调用
调用非全局的RegExp对象的exec()时,返回数组
第一个元素是与正则表达式相匹配的文本
第二个元素是与RegExpObject的第一个子表达式相匹配的的文本(如果有的话)
第三格元素是与RegExp对象的第二个子表达式相匹配的文本(如果有的话),以此类推

search() 有无g标志,匹配结果差不多
match()
match非全局调用(和exec的方法一样)
使用正则表达式模式对字符串执行搜索,并将更新全局RegExp对象的属性以反映匹配结果。如果没有匹配的文本则返回null,否则返回一个结果数组
index声明匹配文本的第一个字符的位置
input存放被检索的字符串string
match全局调用如果regexp具有标志g则match方法将执行全局检索,找到字符串中的所有匹配子字符串
没有找到任何匹配子串则返回null,如果找到了一个或多个匹配子串则返回一个数组,数组元素中存放的是字符串中所有的匹配子串,而且也没有index属性或input属性
str.match(RegExp)

split()
replace()
str.replace(RegExp,”);
str.replace(RegExp,function(){})
function会在每次匹配替换的时候调用,有四个参数
1、匹配的字符串
2、正则表达式分组内容,没有分组则没有该参数,有多个分组就有多个参数
3、匹配项在字符串中的index
4、原字符串

test() exec()是正则表达式提供的方法所以在调用的时候是 RegExp.test()或RegExp.exec()
其他的几个方法是字符串提供的方法,所以调用的时候是 str.方法 来调用

RegExp对象的静态属性
属性短名含义
input 
$_
当前被匹配的字符串
leftContext 

$`

最后一次匹配前的子串
rightContext 
$
在上次匹配之后的子串
lastMath 
$&

最后一个匹配字符串

lastParen 
$+
最后一对圆括号内的匹配子串
multiline 
$*
用于指定是否所有的表达式都用于多行的布尔值
RegExp对象的实例属性
属性含义
global 
 Boolean值,表示g是否已设置
ignoreCase
Boolean值,表示i是否已设置
lastIndex  
整数,代表下次匹配将从哪里字符位置开始
multiline 
Boolean值,表示m是否已设置
Source 
正则表达式的源字符串形式

正则获取控制方法列表
字符类:单个字符和数字
元字符/元符号
 匹配情况
.
匹配除换行符外的任意字符
[a-z0-9]
匹配括号中的字符集中的任意字符
[^a-z0-9]
匹配任意不在括号中的字符集中的字符
\d
匹配数字
\D
匹配非数字,同[^0-9]相同
\w
匹配字母和数字及_
\W
匹配非字母和数字及_

字符类:空白字符
元字符/元符号
 匹配情况
\0
匹配null字符
\b
匹配空格字符
\f
匹配进纸字符
\n
匹配换行符
\r
匹配回车字符
\t
匹配制表符
\s
匹配空白字符、空格、制表符和换行符
\S
匹配非空白字符

字符类:锚字符
元字符/元符号
匹配情况
^
行首匹配
$
行尾匹配
\A
只有匹配字符串开始处
\b
匹配单词边界,词在[]内时无效
\B
匹配非单词边界
\G
匹配当前搜索的开始位置
\Z
匹配字符串结束处或行尾
\z
只匹配字符串结束处

字符类:重复字符
元字符/元符号
匹配情况
x?
匹配0个或1个x
x*
匹配0个或任意多个x
x+
匹配至少一个x
(xyz)+
匹配至少一个(xyz)
x{m,n}
匹配最少m个、最多n个x

字符类:替代字符
this|where|logo 匹配this或where或logo中任意一个

字符类:记录字符
元字符/元符号
匹配情况
(string)
用于反向引用的分组
\1或$1
匹配第一个分组中的内容
\2或$2
匹配第二个分组中的内容
\3或$3
匹配第三个分组中的内容


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值