β

JavaScript正则表达式

星期五 110 阅读
1. 如何声明:

var reg1 = /abc/g;

var reg2 = new RegExp("abc", g)

2.字符类
任意一个字符
[abc]
使用[]表示 匹配[]中的任何一个字符

c[abc]t - cat, cbt, cct

范围
[a-z]

c[a-c]t - cat, cbt, cct

排除
[^a-z]

c[^a-z]t - c1t, cAt ...

组合
[a-zA-z0-9]

c[a-zA-z]t - cat, cAt...

预定义
.     除换行和回车外任意字符    [^\n\r]
\s   匹配空白字符           [\t\n\x0B\f\r]
\S   匹配非空白字符       [^\t\n\x0B\f\r]
\d   匹配数字                 [0-9]
\D   匹配非数字             [^0-9]
\w   匹配字符                [A-Za-z0-9_]
\W  匹配非字符             [^A-Za-z0-9_]

3.特殊字符
\t 制表符
\n 制表符
\r 回车符
\f 换页符
\a alert字符
\e escape字符
\cX 与X相对应的控制字符
\b 与回退字符
\v 垂直制表符
\0 空字符

4. 量词
贪婪量词
{n}     表达式重复n次
{m,n} 表达式至少重复m次,最多重复n次
{m,}   表达式至少重复m次
?       匹配表达式0次或者1次,相当于 {0,1}
+      表达式至少出现1次,相当于 {1,}
*       表达式不出现或出现任意次,相当于 {0,}
惰性量词
{n}?     表达式重复n次
{m,n}? 表达式至少重复m次,最多重复n次
{m,}?   表达式至少重复m次
??       匹配表达式0次或者1次,相当于 {0,1}
+?      表达式至少出现1次,相当于 {1,}
*?       表达式不出现或出现任意次,相当于 {0,}

贪婪量词在匹配字符串的时候首先看是否匹配字符串,如果没有找到匹配的则去掉字符串中最后一个字符再次尝试,整个过程一直重复,直到字符串为空时停止。而惰性量词正好相反,首先查看字符串中第一个字符是否匹配,否则在读入下一个字符在进行匹配,直至重复这个过程到读入整个字符窜都不匹配时停止。可能说了这些多还是不太明白,下面我会举个例子帮助大家理解

5. 分组
使用()进行分组

捕获型分组 ()

/(\d{4})-(\d{2})-(\d{2})/ - 2014-09-07 $1 - 2014

非捕获型分组(?:) 

/(?:\d{4})-(\d{2})-(\d{2})/ - 2014-09-07 $1 - undefined

候选
| 表示多种可能,理解成或

/red|black/ - red, black

6.前瞻
(?=exp)  正向前瞻  匹配exp前面的位置
(?!exp)   负向前瞻  匹配后面不是exp的位置
(?<=exp)   正向后瞻  匹配exp后面的位置 不支持
(?<!exp)   负向后瞻  匹配前面不是exp的位置 不支持

/(.)(?=.*\1)/g //字符串去重 http://blog.sina.com.cn/s/blog_65c2ec5e0101j133.html

7.边界
^    行的开始          
$     行的结尾           
\b   单词的边界  (开始, 结束,空格)             
\B   非单词的边界

8.常见正则表达式

匹配中文:[\u4e00-\u9fa5]
行首行尾空格:^\s*|\s*$
Email:^\w+@[a-z0-9]+(\.[a-z]+){1,3}$
网址:[a-zA-z]+://[^\s]*
QQ号:[1-9][0-9]{4,9}
邮政编码:[1-9]\d{5}
身份证:[1-9]\d{14}|[1-9]\d{17}|[1-9]\d{16}x
9. 常用正则表达式方法
test
字符串判断
返回真假
正则.test(字符串)
例子:是否有不是数字的字符

search
字符串搜索
返回出现的位置
字符串.search(正则)

match
获取匹配的项目,
返回数组
量词:+
全局匹配:g——global

replace
替换所有匹配
返回替换后的字符串
字符串.replace(正则,想替换的)

10. 实际应用 (匹配成对的HTML标签)

"<a class='xxx'>xx</a><ul class='clear'><li><a id='x'>xxx</a></li><li>qqq</li></ul>".match(/<(\w+)[^<]*>(?=.*<\/\1>)/g);


参考资料
http://www.cnblogs.com/rubylouvre/archive/2010/03/09/1681222.html
作者:星期五
一个特立独行的Java程序员,比较宅,上上网,写博客,听音乐,看电影。 明天不上班
原文地址:JavaScript正则表达式, 感谢原作者分享。

发表评论