正则表达式(regular expression)是一种表达文本模式(即字符串结构)的方法,常常用作按照“给定模式”匹配文本的工具。
1、新建正则表达式有两种方法。
一种是使用字面量,以斜杠表示开始和结束。
var regex = / xyz /;
另一种是使用RegExp构造函数。两种等价
var regex = new RegExp( 'xyz' );
2、正则对象生成以后,有两种使用方式:
正则对象的方法:将字符串作为参数,比如 regex.test( string )。
字符串对象的方法:将正则对象作为参数,比如 string.match( regex )。
3、正则对象的属性分成两类。
一类是修饰符相关,返回一个布尔值,表示对应的修饰符是否设置。
** ignoreCase:返回一个布尔值,表示是否设置了i修饰符,该属性只读。
** global:返回一个布尔值,表示是否设置了g修饰符,该属性只读。
** multiline**:返回一个布尔值,表示是否设置了m修饰符,该属性只读。
另一类是与修饰符无关的属性,主要是下面两个。
lastIndex:返回下一次开始搜索的位置。该属性可读写,但是只在设置了g修饰符时有意义
source:返回正则表达式的字符串形式(不包括反斜杠),该属性只读。
var r = / abc / igm ;
r.lastIndex // 0
r.source // "abc"
4、正则对象的test()返回一个布尔值,表示当前模式是否能匹配参数字符串。
/ cat /.test( 'cats and dogs' ) // true
如果正则表达式带有g修饰符,则每一次test方法都从上一次结束的位置开始向后匹配。
带有g修饰符时,可以通过正则对象的lastIndex属性指定开始搜索的位置。
var r= / x/ g;
var s=' _x_x ';
r.lastIndex // 0
r.test(s) // true
r.lastIndex // 2
r.test( s ) // true
r.lastIndex // 4
r.test( s ) // false
r.lastIndex = 4;
r.test( s ) // false
5、exec ( )可以返回匹配结果。
如果正则表示式包含圆括号(即要求“组匹配”),则返回的数组会包括多个元素。其中,第一个元素是整个匹配成功的结果,后面的元素就是圆括号对应的匹配成功的组。
var s = '_x_x';
var r = / _(x) / ;
r.exec( s ) // [ "_x", "x" ]
exec方法的返回数组还包含以下两个属性:
input:整个原字符串。
index:整个模式匹配成功的开始位置(从0开始)。
6、String.prototype.match( ) 字符串对象的match方法对字符串进行正则匹配,返回匹配结果。 如果正则表达式带有g修饰符,则该方法与正则对象的exec方法行为不同,会一次性返回所有匹配成功的结果。 设置正则表达式的lastIndex属性,对match方法无效,匹配总是从字符串的第一个字符开始。
String.prototype.search( ) 字符串对象的search方法,返回第一个满足条件的匹配结果在整个字符串中的位置。如果没有任何匹配,则返回-1。
**String.prototype.replace( ) **字符串对象的replace方法可以替换匹配的值。它接受两个参数,第一个是搜索模式,第二个是替换的内容。 **str.replace( search, replacement ) **
****搜索模式如果不加g修饰符,就替换第一个匹配成功的值
' aaa '.replace( 'a', 'b' ) // "baa"
'aaa'.replace( /a/,'b') // "baa"
'aaa'.replace( /a/g, 'b' ) // " bbb "
String.prototype.split( ) 字符串对象的split方法按照正则规则分割字符串,返回一个由分割后的各个部分组成的数组。
7、元字符:
1、点字符 ( . ) 匹配中间包含的任意一个字符的情况
2、位置字符( ^ $)分别表示字符串的开始位置和结束位置 **
** ( | )或字符
3、重复类({}) {n}恰好重复n次,{n, } 至少重复n次,{ n,m } 重复不少于n次,不多于m次
4、量词符 ? 问号表示某个模式出现0次或1次,等同于{ 0,1 }。【非贪婪模式】
* 星号表示某个模式出现0次或多次,等同于{ 0, }。
+ 加号表示某个模式出现1次或多次,等同于{ 1, }。【贪婪模式】
4.5 字符类【 】只有匹配其中一个就可以 如 [abc]
[^] 表示除了字符类中以外的其他字符都可以匹配 如/[^a]/ //匹配没有a的字符串
【 - 】连续的字符,-左右表示范围 如/[a-z]/ 匹配 a 到 z 26个小写字母
\ 转义符 如匹配到加号,要写出/1+1/
4.6 修饰符表示模式的附加规则,放在正则模式的最尾部。可以单个也可以多个一起使用
g (全局匹配) 第一次匹配成功后就停止匹配。正则模式含有g修饰符,每次都是从上一次匹配成功处,开始向后匹配。
i 表示正则对象忽略大小写
m 表示多行模式,会修改^和$的行为,识别换行符
4.7 预定义模式
** \d 匹配0-9之间的任一数字,相当于[0-9]。**
** \D 匹配所有0-9以外的字符,相当于[^0-9]。**
** \w 匹配任意的字母、数字和下划线,相当于[A-Za-z0-9_]。**
** \W 除所有字母、数字和下划线以外的字符,相当于[^A-Za-z0-9_]。**
** \s 匹配空格(包括制表符、空格符、断行符等),相等于[\t\r\n\v\f]。**
** \S 匹配非空格的字符,相当于[^\t\r\n\v\f]。**
** \b 匹配词的边界。**
** \B 匹配非词边界,即在词的内部。**
4,8 特殊字符
\cX 表示Ctrl-[X],其中的X是A-Z之中任一个英文字母,用来匹配控制字符。
[\b] 匹配退格键(U+0008),不要与\b混淆。
\n 匹配换行键。
\r 匹配回车键。
\t 匹配制表符tab(U+0009)。
\v 匹配垂直制表符(U+000B)。
\f 匹配换页符(U+000C)。
\0 匹配null字符(U+0000)。
\xhh 匹配一个以两位十六进制数表示的字符。
\uhhhh 匹配一个以四位十六进制数表示的unicode字符。