一、js正则表达式——REGEXP对象
(一)实例化
1.字面量法
var reg = /\dis\d/g;
2.构造函数法
var reg = new RegExp('\dis\d','g');
(二)修饰符
-g: global 全文搜索,不添加,搜索到第一个匹配停止
-i: ignore case 忽略大小写
-m: multiple lines 多行搜索
(三)元字符
. * + ? $ ^ / \ () {} []
1.字符类
用[]来构建一个简单的类,泛指。
如:[abc] 将a或b或c的内容,即指含有a或b或c的一类字符串
2.字符类取反
- 用元字符^创建,反向类/负向类
- 反向类指不属于某类的内容
- 表达式[^abc]指不是字符a或b或c的内容(除去a、b、c)
3.范围类
类似于[a-z],用-来连接两个字符,[]来指定类
- [a-z] 表示从a都z得任意一个字符
- [a-z]是个闭区间,包含a和z本身
- 在[]组成的类内部是可以连着写的,如[a-zA-Z](小写字符或者大写字符) 、[0-9-](数字或者-)
'2018-06-13'.replace(/[0-9-]/g,'X');
'XXXXXXXXXX'
4.预定义类
- ‘.’ 等价于 [^\r\n],指 除了回车和换行符之外的所有字符
- '\d' 等价于[0-9],指 数字字符
- ‘\D’ 等价于[^0-9],指 非数字字符
- ‘\s’ 等价于[\t\n\xOB\f\r],指 空白字符
- ‘\S’ 等价于[^\t\n\xOB\f\r],指 非空白字符
- ‘\w’ 等价于[a-zA-Z_0-9],指 单词字符(字母或数字或下划线)
- ‘\W’ 等价于[^a-zA-Z_0-9],指 非单词字符
5.边界字符
- ‘^’ 含义:以XXX开头
- ‘&’ 含义:以XXX结束
- ‘\b’ 含义:单词边界
- ‘\B’ 含义:非单词边界
6.量词
量词作用于其前面的单词或分组
- ‘?’ 含义:出现0次或1次(最多出现1次)
- ‘+’ 含义:出现1次或多次(至少出现1次)
- ‘*’ 含义:出现0次或多次(任意次)
- ‘{n}’ 含义:出现n次
- ‘{n,m}’ 含义:出现n到m次
- ‘{n,}’ 含义:至少出现n次
- ‘{0,n}’ 含义:出现0到n次(最多n次)
7.贪婪模式(默认)
如:\d{3,6} 含义: 匹配3-6个数字,贪婪模式下会尽可能多滴匹配6次
'12345678'.replace(/\d{3,6}/g,'X');
'X78'
8.非贪婪模式
- 让正则表达式尽可能少的匹配,即一旦成功匹配不再继续尝试
- 只需在量词后面加上?即可
'12345678'.match(/\d{3,6}/g);
['123','456']
'123456789'.match(/\d{3,6}/g);
['123','456','789']
9.分组
使用()来分组,使用量词作用于分组
/zhang{3}/ 指:"zhan"+3个“n”
/(zhang){3}/ 指:3个"zhang"
"a1b2c3d4".replace(/([a-z]\d){3}/g,"X");
"Xd4"
10.或
使用|来达到或的效果
"zhangasdf".replace(/zhang|asdf/g,"X");
"XX"
"zhangsdfzhanasdf".replace(/zhan(g|a)sdf/g,"X");
"XX"
11.反向引用
如:将2018-06-13转换成6/13/2018
"2018-06-13".replace(/(\d{4})-(\d{2})-(\d{2})/g,"32指捕获分组2,1指捕获分组1
12.忽略分组
不希望捕获分组,只需在分组内加上?:即可
"/(?:zhang).(ok)/"
13.前瞻
- 正则表达式从文本头部向尾部开始解析,文本尾部方向,为“前”
- 前瞻指正则表达式匹配到规则时,向前(继续往文本尾部)检查是否符合断言,后顾/后瞻方向相反
- JavaScript没有后瞻
- 符合:“肯定/正向”匹配;不符合:“否定/负向”匹配
\w(?:\d)匹配一个单词其后面跟着数字
"a23".replace(/\w(?:\d)/g,"X")
"X23"
"a2345v8".replace(/\w(?:\d)/g,"X")
"X2XX5X8"
"a2*345v8".replace(/\w(?!\d)/g,"X")
"aX34Xv8"
14. 对象属性
- global:全文搜索,默认false
- ignore case:忽略大小写,默认false
- multiple: 多行搜索,默认false
-lastIndex:指当前表达式匹配内容的最后一个字符的下一个位置 - source: 正则表达式的文本字符串
14. 对象的方法
test() exec() search() match() split() replace()
网友评论