正则表达式的学习要点
特性:
1 在执行匹配时, 会按照匹配规则从前至后逐一匹配当前符串, 直到匹配成功或者到当前字符串的结尾。除非使用了^和$来限定字符串的开始和结尾
2
知识点:
1. 字符类
定义: 将任何单个字符直接量放进方括号内就组成了字符类
特性:1 一个字符类可以匹配方括号内的任意字符 // /[abc]/可以匹配任何包含abc的字符串
2 字符类只匹配一次, 匹配到了就继续后继的匹配
3 特殊符号: ^非方括号内的字符, -字符表示字符范围 // /[^abc]/ /[0-9]/
2. 重复
定义: 使用花括号{}和特殊符号? + *来表示正则表达式中某个元素的重复次数
用法: {n, m} 包含n次不包含m次, 左闭右开的区间
{n} 匹配n次
{n,} 匹配n到多次
? 0或1次
+ 1或多次
* 1或多次
3, 选择:
定义: 使用竖线符 | 来表示可供选择的字符,例如:/ab|cd|ef/可以匹配ab或cd或ef,不需要使用圆括号包裹匹配单元ab,因为他把ab当成独立单元,不会单独匹配a或b,而是会匹配ab。如果想加括号,可以加载足以外层,如:(/ab|cd|ef/)
4. 分组和引用
定义: 1 分组: 使用圆括号()来把单项或多项元素组合成子表达式, 以便可以像操作单个单元那样处理它‘
2引用: 使用圆括号来定义子模式,’见javascript权威指南P258页详解
5. 指定位置
定义: 正则表达式的锚点,表示匹配发生的合法位置
特性: 1 ^ 匹配字符串的开头
2. $ 匹配字符串的结尾
3. \b 匹配单词的边界
4. (?=p)要求接下来的字符必须要和p匹配, 但匹配的内容不包含匹配p的那些字符
5. (?!p)要求接下来的字符必须不和p匹配
6. 修饰符
特性: i 执行不区分大小写的匹配
g 全局匹配
m 多行匹配
7 例子
1 匹配所有的正实数 var exp = /[1-9]+[\.][0-9]+/;
2. 匹配url参数
var s = 'locahost:8080//users?name=tome&age=20&grade=3'; var p = /\??(\w+)=(\w+)\&?/g; var r = s.replace(p, function(item, p1, p2) { console.log(item); });
2. 匹配年月日获取年月日
var p2 = /((\d{2})-(\d{2})-(\d{2})) (\S+) (\+(\S+))/; var a = ' 04-06-18 14:13:45 +08:00'; var time = a.replace(p2, function(datestr, year, month, date, timestr, hour, minute, second) { console.log(datestr); console.log(year); console.log(month); console.log(date); console.log(timestr); console.log(hour); console.log(minute); console.log(second); });