当我们在做表单验证或者在代码中查找替换字符串时,我们就会用到正则表达式。刚接触正则表达式的时候感觉它就像乱码一样完全看不懂,在慢慢接触了解掌握匹配规则之后发现正则表达式并不难理解,正则就像一个工具一样,匹配出符合规则的字符串,正则表达式语法多借鉴Perl语言中的正则表达式的语法,在js中通过RegExp对象来使用正则。RegExp对象的test()方法来用以测试传入的参数字符串是否与RegExp对象定义的模式字符串相匹配。下面就归纳总结几条基本的用法。
一,简单的正则表达式
正则以//开头和结尾(有点像注释的写法),创建正则表达式: var myRegExp = / '|'/; 也可利用RegExp对象的构造函数来创建正则,var myRegExp = new RegExp(”/……/“);通常用第一种。举个例子:
var myString = "aa,bb,cc,aa,aa," var myRegExp = /aa/; myString = myString.replace(myRegExp,"AA"); alert(myString);
运行后会发现只有第一个aa被替换掉了,如果我们要进行全局查找进行替换,就要用到正则表达式三个特性:
特性字符 | 描述 |
g | 表示全局匹配,即查找所有与模式匹配的子串,而不是查找到第一个就停止 |
i | 忽略字母大小写, |
m | 多行标记(该标记指定了元字符^和$可以匹配多行字符串开始和结束位置) |
上面的例子如果查找全局的aa,则要写成 var myRegExp = /aa/g;
二,正则表达式中的特殊元字符
1,文本数字标点符号元字符,用进行转义,如果要匹配本身的话则要转义成\
字符类 | 匹配的字符 | 实例 |
d | 0-9中的任何数字 | dd将匹配72,但不匹配aa或7a |
D | 任何非数字字符 | DDD将匹配abc,但不匹配123 |
w | 任何单词字符(包括A-Z,a-z,0-9,以及下划线_字符) | wwww匹配Aa_1 |
W | 任何非单词字符 | W将匹配@ |
s | 任何空白字符,包含水平制表符,换行符,回车符,走纸符,垂直制表符 | s匹配tab |
S | 任何非空白字符 | |
. | 除了换行符( )之外的任何单个字符 | |
[…] | 匹配除了方括号之内的任何一个字符 |
注意:正则中元字符的大小写具有完全不同的意义,在写正则表达式时多加注意
2,正则中的重复字符
专用字符 | 含义 | 实例 |
{n} | 前面的项重复n次 | x{2}将匹配xx |
{n,} | 其那面的项重复n次或者n次以上 | x{2,}将匹配xx,小小小,xxxx…… |
{n,m} | 前面的字符至少出现n次,最多出现m次 | x{2,4}将匹配xx,xxx,xxxx |
? | 前面的项出现0次或一次 | x?将匹配空串或者x |
+ | 前面出现一次或多次,但至少出现一次 | x+匹配x,xx…… |
* | 前面的项出现0次或多次 | 可能匹配空串 |
3,位置元字符
位置元字符 | 描述 |
^ | 该元素表示匹配字符串的开始位子,或者匹配多行字符串每一行的开始位置, |
$ | 该元素表示匹配字符串的结束位子,或者匹配多行字符串每一行的结束位置, |
匹配单词的分界位置,(单词的分界位置就是位于一个单词字符与一个非单词字符之间的位置) | |
B | 匹配单词的非分界位置, |
三,常用正则表达式
http://www.w3cfuns.com/tools.php?mod=regex (w3cfuns正则工具,可测试,常用正则都可以找到)
条件 | 表达式 |
中文字符 | [u4e00-u9fa5] |
空白行 | s* |
HTML标记 | <(S*?)[^>]*>.*?</1>|<.*? /> |
Email地址 | w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)* |
网址URL | [a-zA-z]+://[^s]* |
帐号是否合法 (字母开头,允许5-16字节,允许字母数字下划线) |
^[a-zA-Z][a-zA-Z0-9_]{4,15}$ |
QQ号 | [1-9][0-9]{4,} |
身份证 | d{15}|d{18} |
ip地址 | d+.d+.d+.d+ |
四,参考资料
1,慕课网 http://www.imooc.com/learn/44 表单验证的一个小例子
2,正则表达式必知必会 下载电子书 (专门介绍正则的一本书)
3,javascript入门经典 下载电子书 (page:311,入门)
4,精通正则表达式(第三版) 下载电子书
五,结语
由于本人在前端还属于菜鸟阶段,难免有疏漏错误之处,欢迎个位大牛吐槽指正,不胜感激。
附:(网上一位牛人总结的正则图示)