正则表达式
(Regular Expression)是一种可以用于模式匹配和替换的强有力的工具。我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影,例如,vi编辑器,
Perl或PHP脚本语言,以及awk或sed
shell程序等。此外,象Javascrīpt这种客户端的脚本语言也提供了对正则表达式的支持。由此可见,正则表达式已经超出了某种语言或某个系统的
局限,成为人们广为接受的概念和功能。
正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与数据文件、程序输入以及WEB页面的表单输入等目标对象进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。
举例来说,正则表达式的一个最为普遍的应用就是用于验证用户在线输入的邮件地址的格式是否正确。如果通过正则表达式验证用户邮件地址的格式正确,用户所填
写的表单信息将会被正常处理;反之,如果用户输入的邮件地址与正则表达的模式不匹配,将会弹出提示信息,要求用户重新输入正确的邮件地址。由此可见正则表
达式在WEB应用的逻辑判断中具有举足轻重的作用。
基本语法
在对正则表达式的功能和作用有了初步的了解之后,我们就来具体看一下正则表达式的语法格式。
正则表达式的形式一般如下,其中正则表达式直接量定义在位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只要把希望查找匹配对象的模式内容放入“/”定界符之间即可。
var pattern = /s$/; //定义一个表达式
用构造函数RegExp定义正则表达式
var pattern = new RegExp("s$"); //使用RegExp定义一个表达式
特殊元素含义:
1.非字母字符的直接量
字符 匹配
字母数字字符 自身
\o NUL字符(对应\u0000)
\t 制表符(\u0009)
\n 换行符(\u000A)
\v 垂直制表符(\u000B)
\f 换页符(\u000C)
\r 回车(\u000D)
\xnn 由十六进制数nn指定的拉丁字符,例如,\x0A等价于\n
\uxxxx 由十六进制xxxx指定的Unicode字符,例如,\u0009等价于\t
\cX 控制字符^X,例如,\cJ等价于\n
2.特殊含义字符
^ $ . * + ? = ! : | \ / ( ) [ ] { }
在匹配这些特殊含义字符本身的含义时,要在前面加\,如任何包含\的字符串的正则表达式为:/\\/。
3.字符类直接量
字符 匹配
[…] 位于括号内的任意字符
[^…] 不在括号内的任意字符
. 除换行符和其他Unicode行中止符之外的任意字符
\w 任何ASCII单字字符,等价于[a-zA-Z0-9_]
\W 任何ASCII非单字字符,等价于[^a-zA-Z0-9_]
\s 任何Unicode空白符
\S 任何非Unicode空白符
\d 任何ASCII数字,等价于[0-9]
\D 除了ASCII数字之外的任何字符,等价于[^0-9]
[\b] 退格直接量(特例)
4.重复字符
字符 匹配
{n,m} 匹配前一项至少n次,但是不能超过m次
{n,} 匹配前一项n次,或更多次
{n} 匹配前一项恰好n次
? 匹配前一项0次或1次,也就是说前一项可选,等价于{0,1}
+ 匹配前一项1次或多次,等价于{1,}
* 匹配前一项0次或多次,等价于{0,}
非贪婪的重复:在匹配模式后面加一个问号,如/a+?/只匹配字符串的第一个字母a。
5.选择、分组和引用字符
字符 含义
| 选择,匹配的是该符号左边的子表达式或右边的子表达式
(…) 组合,将几个项目组合为一个单元,这个单元可由*+?|组成
(?:…) 只组合,把项目组合到一个单元,但是不记忆与该组匹配的字符
\n 和第n个分组第一次匹配的字符相匹配,组是括号中的子表达式
(可能是嵌套的),组号是从左到右计数的左括号数,以(?:形式
分组的组不编码
6.锚字符
字符 含义
^ 匹配字符串的开头,在多行检索中,匹配一行的开头
$ 匹配字符串的结尾,在多行检索中,匹配一行的结尾
\b 匹配一个词语的边界
\B 匹配非词语边界字符
(?=p) 正向前声明,要求接下来的字符都与模式p匹配
(?!p) 反向前声明,要求接下来的字符不与模式p匹配
7.标志字符
字符 含义
i 执行大小写不敏感的匹配
g 执行全局匹配,寻找所有的匹配,不在找到第一个匹配后停止
m 多行模式,结合^和$使用(Supported in Javascrīpt1.5)
用于模式匹配的String方法:search、replace、match、split。
用于模式匹配的RegExp方法:exec、test。
/\w{6}/.test("abcdef"); //test用例匹配return true否者为false"Javascrīpt".search(/scrīpt/i);
//search
用例匹配return true否者为false正字表达式举例:
/s$/ 匹配以字母s结尾的字符串
/\\/ 匹配包含反斜杠\的字符串
/[abc]/ 匹配字母“a”、“b”、“c”中的任何一个字母
/[a-z]/ 匹配拉丁字母集中任何小写字母
/[\u0400-\u04FF]/ 匹配所有的Cyrillic字符
/[\s\d]/ 匹配任意空白字符或数字
/\d{2,4}/ 匹配与2和4之间的数字
/\w{3}\d?/ 匹配三个字符一个数字
/\s+java\s+/ 匹配字符串java,切该串前后可以有一个或多个空格
/[^”]*/ 匹配零个或多个非引号字符
/ab|cd|ef/ 匹配字符串ab或者cd又或者ef
/\d{3}|[a-z]{4}/ 匹配一个三位数字或者四个小写字母
/java(scrīpt)?/ 匹配字符串java,其后可以有scrīpt也可以没有
/(ab|cd)+|ef/ 匹配可以是字符串ef,也可以是字符串ab或者cd的一次或多次
/Java(?!scrīpt)([A-Z]\W*)/ 匹配Java跟随一个大写字母和任意多个ASCII字符,但是不能跟随scrīpt
/Java$/im 与Java和Java\nis fun匹配
/^\w{4,8}$/
匹配4~8个字母数字符的组合
/^.{4,8}$/ 匹配4~8个任意字符的组合/^\w+?@\w+\.\w{2,3}$/ 匹配E-mail格式 如wwwwww@wwwwwww.www
/^[0-9a-zA-Z\u4e00-\u9fa5]{4,8}$/
匹配4~8个中英文及数字的组合