正则表达式表示一种字符匹配模式,在两个/ ... / 定界符之间的部分就是匹配模式,用来检查一个字符串是否有某种你需要的子字符串,可以返回或替换。
以下是几类匹配符:
Ⅰ.任意字符型:
1.[ .... ]里面是字符列表,如[abc]匹配的是abc中的任意一个字符(只能一个),也可以[a-d]这样表示,表示a到d之间所有字母的任意一个
2. [ ^... ] 是字符补集,^表示取补集,如[ ^abc ]表示匹配除了abc之外的所有字符
3.\d 匹配任意一个数字,等价于[0-9]
4.\D匹配任意一个非数字,等价于[^0-9]
5.\w 匹配任意一个数字或字母或下划线的字符,等价于[A-Za-z0-9_]
6.\W 匹配任意一个非数字和字母和下划线的字符,等价于[^A-Za-z0-9_]
7. .(小数点) 可以匹配初换行符以外所有字符
Ⅱ.特定字符型:
1.[\b] 匹配一个空格,注意与\b不同
2.\f 匹配一个表单符,\n 匹配一个换行符,\t 匹配一个制表符,\v 匹配一个顶头制表符
3.\s 匹配一个white,等价于[\f\n\r\t\v]
4.\S 匹配 \s的补集
5.\x 两位十六进制,这两位十六进制表示ASCII码,用来表示相应ASCII的字符
Ⅲ.限制型:
1. ^a 表示匹配的字符必须在最前面,如^a能匹配"abc",不能匹配"cba"
2. a$ 表示匹配的字符必须在最后面,如a$能匹配"cba",不能匹配"abc"
3. a{ n }表示匹配连续出现前面的字符n次的字符,不能多也不能少,(注意一个{ }只表示一个字符,如fo{ 3 }值对o有效,f是没有限制的,以下相同)
4. a{ n , }表示表示匹配前面的字符至少连续出现n次的字符,可以多但不能少
5. a{ n ,m }表示匹配前面的字符不少于n个但不多于m次的字符,有上下限制
6. a* 表示匹配前面的字面出现0次或n次的字符,也就是出现不出现都可以,等价于[ 0 , ]
7. a+ 表示匹配前面的字面出现1次或n次的字符,等价于[ 1 , ]
8. a? 表示匹配前面的字面出现0次或1次的字符,等价于[ 0 , 1]
9. \b 表示匹配一个单词分界线,可以是开头,结尾或者空格,比如/\bn /可以匹配 nature 或者 say no 中的n
10. \B表示匹配一个单词的非分界线,如\Ba 就表示a不能开头也不能在空格后,a\B表示不能在结尾也不能在空格前
11. abc|efg 选择匹配器,可以匹配abc或者efg,不限制是单个字符,优先找到左边的
12. ( )表示记录括号内匹配到的东西,能为RegExp对象的$1 $2 $3找到
在JS中正则表达式是由RegExp对象表示的,可以用new RegExp(" " , "标记"); 来创建也可以直接reg=/ /标记 ; 来表示,如 reg=new RegExp("a+b","gi"); 或 reg=/a=b/gi ,每一条正则表达式对应一个RegExp实例,常用的标记有g和i :如果没有设置g标志,每次正则表达式匹配都会只返回最早匹配到了的内容,但如果设置了g标志,一次匹配之后就会记录这个点,下次匹配就能从下一个匹配内容开始,在执行搜索或替换时,对所有匹配部分起作用;如果设置i标志,将忽略大小写。
RegExp有如下几个常用的方法:
1.reg.exec( str ) 方法
该方法永远返回一个单元素的数组,这个元素就是匹配的字符串,如果没有找到匹配则返回null,如果不设置g属性,则永远只返回第一个匹配到的内容
2.reg.test( str ) 方法
该方法返回一个boolean值,true表示找到匹配,false表示没找到
3.str.match( reg) 方法
该方法是以字符串为对象,如果没有找到匹配对象,返回null,如果找到匹配对象返回一个数组,没有设置g属性的话数组里只有最早找到那一个字符串,如果设置了g属性,则返回所有找到的字符串。
4.str.search.(reg)方法
该方法也是以字符串为对象,返回的是找到的匹配的字符串偏移位置,从0开始,中文字符也算一个字符(不是按字节数来),如果没找到匹配返回-1
5.newstr= str.repalce(reg,"$2$1"); 方法
该方法用来替换搜索到的内容,返回的修改后的字符串,关于$的用法:首先使用括号查询到的匹配字符串可以用$1 $2访问到,$1-$9分别表示从先到后匹配到的字符串,当然也可以用其他内容替换
6.arr = str.split(分割标识符 , [limit] ); 方法
该方法用来按分割标识符来分割字符串,limit表示返回的元素数