一、创建正则对象:
1、构造函数RegExp创建正则对象
var pattern = new RegExp('s$'); //pattern匹配以s结尾的字符串
2、使用正则直接量
var pattern = /s$/; //建议这样写
二、正则表达式字符
1、反斜线 在正则表达式中表示转义序列
特殊符号:
^ $ . * + ? = ! : | / ( ) [ ] { }
如果想要在正则表达式中匹配它们,应该在他们前面加上反斜线,如:
var pattern = /$/; //pattern匹配$符号
2、直接量字符
字符 匹配
o NUL字符(u0000)
制表符(u0009)
换行符(u000A)
v 垂直制表符(u000B)
f 换页符
回车符
xnn 由十六进制数nn指定的拉丁字符,例如:x0A等价于
uxxxx 由十六进制数xxxx指定的Unicode字符,例如:u0009等价于
cX 控制字符^X。例如:cJ等价于换行符
3、字符类
字符 匹配
[...] 方括号内的任意字符
[^...] 非方括号内的任意字符
[0-9] 0-9之间的数字
[a-z] 小写的拉丁字母
[A-Z] 大写的拉丁字母
[0-9a-zA-Z] 数字和大小写拉丁字母
下面也属于字符类:
. 除换行符和其他Unicode行终止符之外的任意字符
s 任意Unicode空白符
S 任意非Unicode空白符
d 任意ASCII码数字,等同于[0-9]
D 任意非ASCII码数字的字符,等同于[^0-9]
w 任意ASCII码单词字符,等同于[a-zA-Z0-9_]
W 任意非ASCII数字,等同于[^a-zA-Z0-9_]
[] 在字符类中表示退格直接量
4、重复字符类
贪婪的重复字符
字符 匹配
{n,m} 前一项至少n次,但不能超过m次
{n,} 前一项至少n次
{n} 前一项恰好n次
? 前一项0次或1次,等价于{0,1}
+ 前一项至少一次,等价于{1,}
* 前一项0次或多次,等价于{0,}
非贪婪的重复匹配只需在贪婪的重复字符后面加上一个?(问号),且问号后没有其他表达式字符,否则非贪婪匹配忽略。例:
var str = 'aaaaaa',
str2 = 'aaaaaabc',
pattern = /a+/,
pattern2,
pattern3;
pattern.exec(str); //全部匹配
pattern2 = /a+?/;
pattern2.exec(str); //只匹配了字符串中str的第一个a
pattern3 = /a+?bc/;
pattern3.exec(str2); //全部匹配,匹配结果为aaaaaabc
5、选择,分组,引用
字符 含义
| 表示或,用于分隔选择
() 子表达式(子模式),可以引用子模式匹配结果
(?:) 子表达式(子模式),可以引用子模式匹配结果,但是子模式匹配结果不出现在正则匹配结果集中
(n为数字) 引用对应的子模式匹配结果
6、位置字符
字符 匹配
^ 字符串的开头
$ 字符串的结尾
位于w(单词字符)与W(非单词字符)的边界或位于一个ASCII单词字符与一个字符串的开头和结尾之间的边界
B 非词语之间的位置
(?=p) 正前向声明,要求接下来的字符与模式p匹配,但是不包括匹配中的那些字符
(?!=p) 反前向声明,要求接下来的字符不与模式p匹配
例:
1 var url = 'vip.etao.com/youhui.htm?drawCredits',
2 pattern = /youhui/,
3 pattern2 = /^vip.etao.com/.+drawcredits$/i;
4
5 pattern.exec(url); //匹配youhui子串
6 pattern2.exec(url); //全部匹配url变量值
三、正则对象标准,属性,及方法
1、标志
标志 含义
g 全局匹配
i 不区分大小写
m 多行匹配
2、方法
exec 接受一个字符串参数,返回由完全匹配和子表达式匹配结果组成的数组
test 接受一个字符串参数,返回boolean值
compile 编译正则表达式
3、属性
source 正则表达式的文本
global 是否拥有全局搜索标志g
ignoreCase 是否拥有标志i
multiline 是否拥有标志m
lastIndex 搜索匹配的开始位置(可读写)