正则表达式注意项
分组
括号(),表示子表达式,也叫分组
1.例子
var reg = /(\w)(\w)/; var str='zhufengpeixun'; alert(reg.exec(str));
返回zh,z,h
,zh
是整个正则匹配的内容,z
是第一个括号里的子正则表达式匹配的内容,h是第二个括号匹配的内容。
这里要注意:每个分组匹配的内容都要返回到结果中。
2、例子
var reg = /(\w)\1/; var str='zhufengpeixun'; alert(reg.exec(str));
返回null。
3.例子
var reg = /(\w)\1/; var str='bbs.zhufengpeixun.cn'; alert(reg.exec(str));
这个正则会匹配到bb,b
。这里的“\1”
叫做反向引用,它表示的是第一个括号内的子正则表达式匹配的内容,而不是“第一个括号的内容”。
不记录子正则表达式的匹配结果[匹配不捕获]
使用形如(?:pattern)
的正则就可以避免保存括号内的匹配结果。
4.例子
var reg = /^(b|c).+/; var str='bbs.blueidea.com'; alert(reg.exec(str));
结果:bbs.blueidea.com,b
5.例子
var reg = /^(?:b|c).+/; var str='bbs.blueidea.com'; alert(reg.exec(str));
结果:bbs.blueidea.com
但是,反向引用也不好使了:
6.例子
var reg = /^(b|c)\1/; var str='bbs.zhufengpeixun.cn'; alert(reg.exec(str));
结果:bb,b
7.例子
var reg = /^(?:b|c)\1/; var str='bbs.zhufengpeixun.cn'; alert(reg.exec(str));
结果:null
因为根本就没有记录括号内匹配的内容,自然就没办法反向引用了。
元字符
*
表示0
次或者多次,等同于{0,}
,即c*
和c{0,}
是一个意思。
+
表示一次或者多次,等同于{1,}
,即c+
和c{1,}
是一个意思。
?
表示0
次或者1
次,等同于{0,1}
,即c?
和c{0,1}
是一个意思。
.(一个点)表示匹配字符串中出现的第一个非换行符字符。
8.例子
reg = /.+/; str='\nonline.zhufengpeixun'; alert(reg.exec(str));
结果:online.zhufengpeixun
9.例子
reg = /^./; //这样表示必须以非换行符开始。 str='\nzhufengpeixun'; alert(reg.exec(str));
结果:null
正则表达式中的或“|”
10.例子
/^z|o.+/.exec('online'); //匹配到整个online。
11.例子
/^z|o.+/.exec('zhufengpeixun.cn'); //结果只有一个z,而不是整个字符串。因为上面正则表达式的意思是,匹配开头的z或者是o.+。
12.例子
/^(z|o).+/.exec('zhufengpeixun'); //结果是整个串zhufengpeixun,z,加上上面的括号这后,这个正则的意思是,如果字符串的开头是z或者o,那么匹配开头的z或者o以及其后的所有的非换行字符。
[ ] 表示在一组字符中任选一个。
/[a-z]/表示匹配从a到z中的任意一个字母,只要是在ASCII码表里连续出现的字符,都可以用这样的表示法。比如var reg=/^[!-z]$/;
就会匹配从字符“!
”开始,到字符“z
”结束的任意一个字符。
正则/^[!-z]$/
也可以用16进制来表示。如果用16进制表示,则需要用\u
开头,表示这是在以16进制的方式定义unicode
字符,并且后边的16进制的编码要写成四位,不足4位的前边补0。则上边的那个正则,也可以写成
var reg=/^[\u0021-\u007a]$/; // 字符“!”对应的16进制编码是21,字符“z”的16进制编码是7a。
中文是扩展的ASCII字符编码,匹配UTF8中文的正则是:/^[\u4e00-\u9fa5]+$/
php中utf-8编码下用正则表达式匹配汉字的正则是:/^[\x{4e00}-\x{9fa5}]+$/u
注意:写成[1-63]
不是表示从数字1到数字63,而是表示从1到6和3。因为正则里是在表示连续出现的字符,而不是数字。/[1-63]/.exec("2dcvf");返回的结果是2,因为2在1-6之间,/[1-63]/.exec("8dcv3f");则返回3,因为8不在1-6之间,正则匹配到3。
反字符集合[^abc]
^
在正则表达式开始部分的时候表示开头的意思,例如/^c/
表示开头是c;但是在字符集和中,它表示的是类似“非
“的意思,例如[^abc]
就表示不能是a,b或者c中的任何一个。
13.例子
var reg = /[^abc]/; var str='cbazhufengpeixun'; alert(reg.exec(str));
输出z
,前三个字符都是[abc]
集合中的。由此我们可知:[^0-9]
表示非数字,[^a-z]
表示非小写字母,依次类推。