一.正则表达式匹配原则
占有字符和零宽度
在正则表达式匹配过程中,如果子表达式匹配到的是字符内容,并被保存在结果之中,那么就说该子表达式是占有字符的。如果子表达式占有的只是位置,或者没有保存到结果中去,那么就说该子表达式是零宽度的。
零宽度的子表达式在匹配成功或者匹配失败之后,把匹配权交给下一个子表达式,下一个子表达式会在零宽度的子表达式位置开始。这是零宽度的子表达式的特点,不占用字符宽度。
正则匹配方式 /abc/
正则匹配式/abc/匹配原字符串abc匹配过程:
首先由字符a取得匹配权,因为它在/abc/中排首位,从位置0开始匹配,匹配成功,然后保存结果a,把匹配权交给第二顺位b,b从位置1开始匹配,匹配成功,保存结果并把匹配权交给c,c从位置2开始匹配,匹配成功保存结果,并输出匹配结果abc,开始位置为0,结束位置为3。
二.正则匹配中用到的方法
1.直接量语法 /pattern/attributes;
2.创建RegExp对象的语法 var regepx = new RegExp(pattern,attributes);
参数 pattern 是一个字符串,制定了正则表达式的规则模式,attributes是一个可选参数,包含三种属性 i , g , m 分别是忽略大小写;全局匹配;分段匹配;
1.search()方法
基本语法: stringObject.search(regexp)
参数:regexp是需要在stringObject中检索的正则表达式
返回值:返回在stringObject中第一个与regexp相匹配的位置,如果没有就返回 -1
注意:search()方法不支持全局属性g,而且它每次都会在字符串的开始位置进行查找。
2.match()方法
基本语法 stringObject.match(searchValue) 或者stringObject.match(regexp)
参数searchValue 需要检索字符串的值 regexp是需要在stringObject中检索的正则表达式
返回值:
它可以全局匹配模式,全局匹配的话,它返回的是一个数组。如果没有找到任何的一个匹配,那么它将返回的是null;返回的数组内有三个元素,第一个元素的存放的是匹配的文本,还有二个对象属性;index属性表明的是匹配文本的起始字符在stringObject中的位置;input属性声明的是对stringObject对象的引用。
3.replace()方法
该方法用于在字符串中使用一些字符替换另一些字符,或者替换一个与正则表达式匹配的子字符串
基本语法: stringObject.replace(regexp/substr,replacement);
参数:regexp/substr; 字符串或者需要替换模式的RegExp对象
replacement:一个字符串的值,被替换的文本或者生成替换文本的函数
返回值:返回替换后的新字符串
4.split()方法
该方法把一个字符串分割成字符串数组。
基本语法:stringObject.split(separator,howmany);
separator[必填项],字符串或正则表达式,该参数指定的地方分割stringObject;
howmany[可选] 该参数指定返回的数组的最大长度,如果设置了该参数,返回的子字符串不会多于这个参数指定的数组。如果没有设置该参数的话,整个字符串都会被分割,不考虑他的长度。
返回值:被切割的字符串数组
5.test()方法
基本语法:RegExpObject.test(str);
参数:str是要检测的字符串
返回值:如果与被检测字符串想匹配,返回true,反之,返回false;
三.JavaScript正则表达式中的元字符
元字符 含义
. 查找任意的单个字符,除换行符外
\w 任意一个字母或数字或下划线,A_Za_Z0_9,_中任 意一个
\W 查找非单词的字符
\d 匹配一个数字字符
\D 匹配一个非数字字符
\s 匹配任何空白字符,包括空格,制表符,换行符等
\S 匹配任何非空白字符
\b 匹配一个单词边界,也就是指单词和空格间的位置
\B 匹配非单词边界
\0 查找NUL字符
\n 匹配一个换行符
\r 匹配一个回车符
\v 匹配一个垂直制表符
四.正则表达式中[] 方括号的含义
[abc] 匹配abc中的任意一个字符
[0-9] 匹配数字0-9中的任意一个
[a-z] 匹配小写字母a-z中的任意一个
(a|b|c) 等价于[abc] 匹配abc中的任意一个
在方括号[]中最前面加上^符合可以表示取反
[^abc] 匹配除了abc之外的任意字符
[^a-z] 匹配除了小写字母a-z之外的所有字符
五.正则表达式中的量词和转义
正则表达式中在需要转义的特殊字符前面加上 \
如 ^字符表示匹配开始位置的字符 包含^本身的话 需要使用 ^\
量词
量词 描述
n+ 匹配任何至少包含一个n的字符串
n* 匹配零个或者多个n的字符串
n? 匹配零个或者1个n的字符串
n{x} 匹配包含x个n的序列字符串
n{x,y} 匹配至少x个,最多y个n的字符串
n{x,} 匹配至少x个的字符串
n$ 匹配以n结尾的字符串
^n 匹配以n开头的字符串
?=n 匹配其后紧接指定的n字符串
?!n 匹配其后没有紧接指定的n字符串
六.贪婪模式与非贪婪模式
贪婪模式:匹配行为在匹配成功的前提下,继续匹配,尽可能多的成功匹配几次。
非贪婪模式:匹配行为在匹配成功后,不再进行匹配行为。
常见的贪婪模式量词:{x,y} , {x,} , ? , * , 和 +
非贪婪模式在贪婪模式量词后加上一个?号,就可以把贪婪模式变成非贪婪模式
{x,y}?,{x,}?,??,*?,和 +?