JavaScript正则表达式
JavaScript正则表达式
正则表达式经常被简称为模式,正则表达式是由正则表达式语言创建的,正则表达式语言并不是一种完备的程序设计语言。更准确的说,正则表达式语言是内置于其他语言或软件产品的“迷你”语言。
定义正则表达式
js中的正则表达式用RegExp对象表示,有两种方式创建RegExp对象。
一种是通过一种特殊的直接量语法创建
var pattern = /s$/
另一种是使用RegExp()构造函数
var pattern = new RegExp('s$')
如果需要修饰符
var pattern = /s$/i
var pattern = new RegExp('s$','i')
js中正则表达式语法
js中正则表达式还是比较弱的,比如不支持后行断言,不支持嵌入条件。
基础字符
^ $ . * + ? = ! : | \ / ( ) [ ] { }
字符 | 匹配 |
\ | 做转义,即通常“\”后面的字符不按原来的意义解释,如/b/匹配字符‘b’,而/\b/转义为匹配一个字符的边界。 或 对正则表达式功能字符的还原,如“*”表示匹配它前面元字符0次或n次,而加“\”后,/a\*/匹配“a*” |
^ | 匹配一个输入或一行的开头,/^a/匹配以a开头的输入 |
$ | 和^相反, 匹配一个输入或一行的结尾 |
() | 标记一个子表达式的开始和结束位置。 |
[ | 标记一个钟括号表达式的开始。 |
直接量字符
直接量字符包括字面含义的字母和数字、非字母的字符、和一些具有特殊含义的字符,后面两种需要转义。
字符 | 匹配 |
字母和数字 | 自身 |
\0 | 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 |
Windows使用\r\n表示文本行结束,Unix、Linux只使用\n表示文本结束。
字符类
将直接量字符单独放进方括号内就组成了字符类,一个字符类可以匹配它所包含的任意字符。由于某些字符类非常常用,因而在js的正则表达式语法中,使用了特定字符的转义字符来表示它们。
字符 | 匹配 |
[...] | 方括号内的任意字符,如[xyz] 匹配这个集合中的任意一个字符 |
[...] | 不在方括号内的任意字符 |
. | 除换行符和其他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] | 退格直接量(特例) 匹配一个退格符 |
重复字符
字符 | 匹配 |
{n,m} | 匹配前一项n-m次 |
{n,} | 匹配前一项n次以上 |
{n} | 精确匹配前一项n次 |
? | 匹配前面元字符0次或1次,如/ba*/ 等价于b,ba |
+ | 匹配前面元字符1次或n次,如/ba*/ 等价于ba,baa,baaa,…… |
* | 等价于?和+的并集,匹配前面元字符0次或n次,如/ba*/ 等价于b,ba,baa,…… |
选择
字符 | 匹配 |
| | 匹配的是该字符左边的子表达式或右边的子表达式 |
运算符优先级
正则表达式从左到右进行计算,并遵循优先级顺序,与算术表达式非常类似。
运算符 | 描述 |
\ | 转移符 |
(),(?:),(?=),[] | 圆括号和方括号 |
*,+,?,{n},{n,},{n,m} | 限定符 |
^,$,\任何元字符、任何字符 | 定位点和序列(即;位置和顺序) |
| | 替换,“或”操作 字符具有高于替换运算符的优先级,使得“m|food”匹配“m”或“food”。 |
常用正则表达式组合
验证邮箱 /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/
也可以写成 /^(\w+[_|\.])*\w+@(\w+[_|\.])*\w+\.[a-zA-Z]{2,3}$/
等等。。
正则表达式的使用
使用正则表达式的方法match,exec,test
test (regexp.test(str))
返回值boolean类型,制作单纯的判断
exec(regexp.exec(str))
返回匹配到的字符串,如果没有匹配的则返回null
match (str.match(regexp))
和exec一样,但参数是正则表达式
lift is made up of small pleasures.
生活是由各种微小的幸福构成。
日积月累,就会产生意想不到的Miracles。
每一天的坚持,每一天的收获,我与你同在!!