javascript——正则表达式


一、正则表达式定义

创建方法:RegExp()构造函数创建、直接量语法创建;

1.直接量语法

不具有特殊含义的字母数字及部分有转义字符前缀的匹配字符;

2.字符类

将直接量字符单独放进方括号内就组成了字符类;有些使用转义字符+特殊字符来简洁表示;

javascript——正则表达式

方括号之中也可以写这些特殊转义,如[sd];

3.重复

javascript——正则表达式

非贪婪重复:以上匹配重复字符是尽可能多的匹配,而且后续的正则表达式继续匹配,称之为贪婪匹配;
可以在待匹配的字符后跟随一个?,如“??”,“+?”,“{1,5}?”,这是非贪婪匹配,是尽可能少的匹配。

使用非贪婪的匹配模式所得到的结果可能和期望不一致,一个例子说明两者的区别:
贪婪模式:/a+b/ ,当使用“aaab”作为匹配字符串时,会匹配整个字符串;
非贪婪模式:/a+?b/ ,当使用“aaab”作为匹配字符串时,该正则表达式希望匹配一个a和最后一个b,但实际上这个模式却匹配了整个字符串;

4.选择、分组和引用

“|”:用于分隔供选择的字符;

“()”:
一个作用是把单独的项组合成子表达式,以便对单元内的项进行处理;
另一个作用是在完整的模式中定义子模式:当一个正则成功地和目标字符串相匹配时,可以从目标串中抽出和圆括号中的子模式相匹配的部分;可以通过1来找到第一个带圆括号的子表达式;(这是正则表达式检索和替换操作的强大特性之一);当使用了复制符号?时,这种改进的括号冰冰生成引用;

javascript——正则表达式

5.指定匹配位置

javascript——正则表达式

6.修饰符

javascript——正则表达式

二、用于模式匹配的String方法

String支持4种使用正则表达式的方法:search()、replace()、match()、split()

1.search()

参数是一个正则表达式,返回第一个与之匹配的子串的起始位置,如果找不到匹配的子串返回-1;
参数不是正则时会转化;
search()方法不支持全局搜索;

2.replace()

用于执行检索与替换操作;
第一个参数是一个正则表达式,第二个参数是要进行替换的字符串,第二个参数可以是函数;
如果正则表达式中设置了修饰符g,那么源字符串中所有与模式匹配的子串都将被替换;否则只替换第一个匹配项;
第一个参数不是正则而是字符串,不会进行转换,而是直接搜索这个字符串;
如果替换字符串中出现了$加数字,则replace()将用与指定的子表达式相匹配的文本来替换;

3.match()

参数为正则表达式,不是正则转化为正则;
返回的是一个由匹配结果组成的数组;
如果正则使用了修饰符g,则该方法返回的数组包含字符串中的所有匹配结果;没有使用g返回的数组第一个元素是第一个匹配到的结果,余下的元素是正则表达式中用圆括号括起来的子表达式;

4.split()

参数可以是一个字符串,返回的是将源字符串以参数字符串分隔成的字符串组成的数组;
参数还可以是一个正则表达式,指定想要的分隔符;

三、RegExp对象

1.RegExp的属性

source:包含正则表达式的文本,只读;
global:用以说明这个正则表达式是否带有修饰符g,只读;
ignoreCase:用以说明正则表达式是否带有修饰符i,只读;
multiline:用以说明正则表达式是否带有修饰符m,只读;
lastIndex:可读写,如果匹配模式带有g修饰符,这个属性存储在整个字符串中下一次下一次检索的开始位置,这个属性会被exec()和text()方法用到;

2.RegExp的方法

exec()方法:与字符串的match()方法类似,只是exec()的参数是一个字符串;
exec()方法对一个指定的字符串执行一个正则表达式,如果没有找到匹配返回null,如果找到匹配返回一个数组,数组的第一个元素包含的是与正则表达式相匹配的字符串,余下的元素是与圆括号内的子表达式相匹配的子串,属性index包含了发生匹配的字符为值,属性input引用的是正在检索的字符串;不管有没有修饰符g,返回的数组都一样;

调用test()和调用exec()等价,当exec()返回结果不是null时,test()返回true;
test()从lastIndex指定的位置开始检索某个字符串,如果找到了一个匹配结果,那么它就立即设置lastIndex为当前匹配子串的结束位置;

与exec()和test()不同,String的方法search()、replace()、match()并不会用到lastIndex属性。


发表评论

电子邮件地址不会被公开。

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>