之前一直觉得正则表达式很NB,几乎各种类型的字符串都能够通过正则来进行匹配,抱着这种心态开始regular expressions的学习。
总的来讲,regular expressions的语法还是比较简单的,总共也没有多少。
下面先列举regular expressions的字符介绍,最后再通过实例加深对regular expressions的理解。
内容参考:http://www.cnblogs.com/elleniou/archive/2012/07/31/2617312.html
正则表达式测试工具:http://tool.chinaz.com/regex/
\
将\之后的字符标记为一个特殊字符。例如"\n"匹配换行符,"\\"匹配"\"。
^
用于匹配字符串的开始位置。
$
用于匹配字符串的结束位置。
*
零次或者多次匹配前面的一个字符或者子表达式。
+
一次或者多次匹配前面的一个字符或者子表达式。
?
零次或者一次匹配前面的一个字符或者子表达式。
{n}
n是非负整数。匹配前面的一个字符或者子表达式n次。
{n,}
n是非负整数。匹配前面的一个字符或者字表达式至少n次。
{n,m}
n和m都是非负整数,其中n<=m。匹配前面的一个字符或者子表达式至少n次,至多m次。
?
当这个字符后面跟随其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式为“非贪心的”,“非贪心的”模式匹配搜索到的、尽可能短的字符串,而默认的“贪心的”模式匹配搜索到的、尽可能长的字符串。举个例子说明下,在字符串“aaa”中,“a+?”只匹配单个“a”,而“a+”匹配所有的“a”。
.
匹配除了“\n”之外的任何单个字符。假如想匹配包括“\n”在内的任意字符,可使用类似"[\s\S]"之类的正则。
(pattern)
匹配pattern并捕获该匹配的子表达式
(?:pattern)
匹配pattern但不捕获该匹配的子表达式,换句话说,它是一个非捕获匹配,不存储供以后使用的匹配,即匹配的内容不被缓存。
对于用“or”字符(|)组合模式很有帮助。比如,“lov(?:e|ing)”比“love|loving”更经济。
(?=pattern)
执行正向预测先行搜索的子表达式。比如‘windows(?=95|98|NT|2000)’匹配“windows 2000”中的“windows”,但不匹配“windows 3.1”中的“windows”。
(?!pattern)
与(?=pattern)匹配的正好相反。
x|y
匹配x或y
[abc]
字符集。匹配其中包含的任一字符。
[^abc]
反向字符集。匹配未包含的任何字符。
[a-z]
字符范围。
[^a-z]
反向字符范围。
\b
匹配一个字边界。比如“er\b”匹配“never”中的“er”,而不匹配“verb”中的“er”。
\B
与\b相反。
\cx
匹配x指示的控制字符。比如,\cM匹配Control-M或回车符。x的值必须在a-z或者A-Z之间。
\d
数字字符匹配。等效于[0-9]。
\D
非数字字符匹配。
\f
换页符匹配。
\n
换行符匹配。
\r
匹配一个回车符。
\s
匹配任何空白字符,包括空格、制表符、换页符等等。
\S
匹配任何非空白字符。
\t
匹配制表符。
\v
匹配垂直制表符。
\w
匹配任何数字字符,包括下划线。与[A-Za-z0-9]等效。
\W
与\w相反。
\xn
匹配n,此处的n是一个十六进制转义码。十六进制转义码必须是两位数长。例如“\x41”匹配“A”。“\x411”与"\x41"&"1"等效。
\num
匹配num,此处的num是一个正整数。例如“(.)\1”匹配两个连续的相同字符。
实例:
2 整数或者两位小数:^[0-9]+\.{0,1}[0-9]{0,2}$ 3 只能输入数字:"^[0-9]*$"。 4 只能输入n位的数字:"^\d{n}$"。 5 只能输入至少n位的数字:"^\d{n,}$"。 6 只能输入m~n位的数字:。"^\d{m,n}$" 7 只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。 8 只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。 9 只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"。 10 只能输入非零的正整数:"^\+?[1-9][0-9]*$"。 11 只能输入非零的负整数:"^\-[1-9][]0-9"*$。 12 只能输入长度为3的字符:"^.{3}$"。 13 只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。 14 只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。 15 只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。 16 只能输入由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"。 17 只能输入由数字、26个英文字母或者下划线组成的字符串:"^\w+$"。 18 验证用户密码:"^[a-zA-Z]\w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。 19 验证是否含有^%&‘,;=?$\"等字符:"[^%&‘,;=?$\x22]+"。 20 只能输入汉字:"^[\u4e00-\u9fa5]{0,}$" 21 验证Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。 22 验证InternetURL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。 23 验证电话号码:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正确格式为:"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。 24 验证身份证号(15位或18位数字):"^\d{15}|\d{18}$"。 25 验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"1"~"12"。 26 验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"和"1"~"31"。 27 匹配中文字符的正则表达式: [\u4e00-\u9fa5] 28 匹配双字节字符(包括汉字在内):[^\x00-\xff] 29 应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) 30 String.prototype.len=function(){return this.replace(/[^\x00-\xff]/g,"aa").length;} 31 匹配空行的正则表达式:\n[\s| ]*\r 32 匹配html标签的正则表达式:<(.*)>(.*)<\/(.*)>|<(.*)\/> 33 匹配首尾空格的正则表达式:(^\s*)|(\s*$)