1. 什么是正则表达式
.Regular Expression 使用单个字符串来描述、匹配一系列符合某个句法规则的字符串
2. 正则表达式工具:http://regexper.com
3. javaScript 通过内置对象RegExp支持正则表达式
有两种方法实例化RegExp对象
.字面量
1) Var reg = /\bis\b/g;
\b -> 表示单词边界
g -> 表示全文匹配
.构造函数
1) Var reg = new RegExp (‘\bis\b’ , ’g’);
\ -> 转义‘\’
4. 修饰符
1) g :global 全文搜索,不添加,搜索到第一个匹配停止(默认为false)
2) I : ignore case 忽略大小写,默认大小写敏感(默认为false)
3) m : multiple lines 多行搜索(默认为false)
5.元字符
.正则表达式由两种基本字符类型组成
1) 原义文本字符
2) 元字符
. 元字符是在正则表达式中有特殊含义的非字母字符
1) \t 水平制表符
2) \w 垂直制表符
3) \n 换行符
4) \r 回车符
5) \0 空字符
6) \f 换页符
. + ? $ ^ . | \ ( ) { } [ ]
6. 字符类
.可以使用 [ ] 来构建一个简单的类
.所谓类是指符合某些特性的对象,一个泛指,而不是特指某个字符
.表达式 [abc] 把字符a 或 b 或 c 归为一类,表达是可以匹配这类的字符
例: ‘a1b2c3d4’.replace(/[abc]/g , ‘X’) —> ‘X1X2X3d4’
. 字符类取反 ‘^’ 表达式 [^abc] 表示 不是字符a 或 b 或 c 的内容
7. 范围类
. [a-z] 表示从a 到z 的任意字符,为闭区间包含a 和z。
例: 1) ‘2019-01-01’.replace(/[0-9]/g , ‘A’) —> ‘AAAA-AA-AA’
2) ‘2019-01-01’.replace(/[0-9-]/g , ‘A’) —> ‘AAAAAAAAAA’
8.预定义类
1) . 除了回车符和换行符之外的所有字符
2) \d 数字字符
3) \D 非数字字符
4) \s 空白字符
5) \S 非空白字符
6) \w 单词字符(字母、数字下滑线)
7) \W 非单词字符
9. 边界
.正则表达式提供了几种常用的边界匹配字符
1) ^ 以xx开始
2) $ 以xx结束
3) \b 单词边界
4) \B 非单词边界
例子: 1) ‘@123@abc@’.replace(/@./g , ‘Q’) —> ‘Q23Qbc@’
2) ‘@123@abc@’.replace(/^@./g , ‘Q’) —> ‘Q23@abc@’
3) ‘@123@abc@’.replace(/.@/g , ‘Q’) —>‘@12QabQ’
4) ‘@123@abc@’.replace(/.@$/g , ‘Q’) —>‘@123@abQ’
10. 量词(作用于紧挨着的前一个字符)
1) ? 出现零次或一次(最多出现一次)
2) + 出现一次或多次(至少出现一次)
3) 出现零次或多次(任意次)
4) {n} 出现n次
5) {n,m} 出现n到m次
6) {n,} 至少出现n次
11.模式
.贪婪模式(默认)最大限度匹配
例:‘12345678’.replace(/\d{3,6}/g . ‘X’) —> ‘X78’
.非贪婪模式(在量词后加上?即可)
例:‘12345678’.replace(/\d{3,6}?/g . ‘X’) —>‘XX78’
12.分组
.使用 ( ) 可以达到分组的功能,使用量词作用于分组
例:‘a1b2c3d4’.replace(/([a-z]\d){3}/g , ‘X’) —> Xd4
.反向引用 $ (使用$ 对分组进行捕获)
例:‘2019 -01-01’.replace(/(\d{4})-(\d{2})-(\d{2})/g , ‘$2/$1/$3’) —> 01/01/2019
.忽略分组
不希望捕获某些分组,只需要在分组内加上 ? : 就可以
例 : (?: Byron).(ok) —> 分组1 为 (ok)
13.前瞻
. 正则表达式从文本的头部向尾部开始解析,文本的尾部方向,称为‘前’
. 前瞻就是在正则表达式匹配到规则的时候,向前检查是否符合断言,后顾/后瞻方向相反。
. javaScript 不支持后顾
. 符合和不符合特定断言称为 肯定/正向匹配和 否定/负向 匹配
1) 正向前瞻 exp(? = assert)
例:‘a234vv’.replace(/\W(?=\d)/g , ‘X’) —> ‘X2X4vv’
2) 负向前瞻 exp(?!assert)
例:‘a234vv’.replace(/\W(?!\d)/g , ‘X’) —> ‘aX3XXX’
14. RegExp.prototype.test(str)
.用于测试字符串参数中是否存在匹配正则表达式模式的字符串
.如果存在则返回true,否则返回false
例:
(/\w/g).test(‘a’) —> true
15. Stringl.protatype.search(reg)
. serach()方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。
.方法返回第一个匹配的结果index ,查找不到返回-1。
. search()方法不执行全局匹配,它忽略标志g ,并且总是从字符串的开始进行检索。
例子:
1) ‘a1b2c3d1’.search(‘1’) —> 1
2) ‘a1b2c3d1’.search(‘10’) —> -1
3) ‘a1b2c3d1’.search(1) —> 1
4) ‘a1b2c3d1’.search(/1/) —> 1
5) ‘a1b2c3d1’.search(/1/g) —> 1
16. Stringl.protatype.match(reg)
. match() 方法将检索字符串,以找到一个或多个与regexp匹配的文本
. regexp 是否具有标志g 对结果影响很大
. 如果regexp 没有标志g ,那么match() 方法就只能在字符串中执行一次匹配
. 如果没有找到任何匹配的文本,将返回 null
. 否则它将返回一个数组,其中存放了与它找到的匹配文本有关的信息
例:1) var reg = /\d(\w)\d/g;
var ts = ‘$1a2b3c4d5e’;
ret = ts.match(reg);
conosole.log(ret) —> [“1a2” , “3c4”]
2) var reg = /\d(\w)\d/;
var ts = ‘$1a2b3c4d5e’;
ret = ts.match(reg);
conosole.log(ret) —> [“1a2” , “a”] 其中 “a” 为匹配文本分组内容
17. Stringl.protatype.split(reg)
. split 方法把字符串分割为字符数组
例 : ‘a,b,c,d’.split(‘,’); —> [“a” , ”b” , ”c” , ”d”]
.在复杂的分割情况下我们可以使用正则表达式解决
例 : ‘a1b2c’3d.split(‘/\d/); —> [“a” , ”b” , ”c” , ”d”]
18. Stringl.protatype.replace(reg, function)
. function 参数含义
Function会在每次匹配替换的时候调用,有四个参数
1) 匹配字符串
2) 正则表达式分组内容,没有分组则没有该参数
3) 匹配项在字符串中的index
4) 原字符串
例:
1) ‘a1b2c3d4e5’.replace( /\d/g , function(match,index,origin){
Console.log(index);
Return parseInt(match) +1
})
-> 1
-> 3
-> 5
-> 7
-> 9
-> “a2b3c4d5e6”
2)‘a1b2c3d4e5’.replace( /(\d)(\w)(\d)/g ,
function(match , group1 , group2 , group3 , index , origin){
Console.log(match);
Return group1 + group3
})
->“1b2”
-> “3d4”
-> “a12c34e5”
1.【trunc(for dates)】TRUNC()函数处理日期
语法格式:TRUNC(date[,fmt])
其中:date 一个日期值;fmt 日期格式。
该日期将按指定的日期格式截取;忽略它则由最近的日期截取。
示例:
select trunc(sysdate) from dual;—2017/2/13,返回当前时间
select trunc(sysdate,’yy’) from dual;—2017/1/1,返回当年第一天
select trunc(sysdate,’mm’) from dual;—2017/2/1,返回当月的第一天
select trunc(sysdate,’d’) from dual;—2017/2/12,返回当前星期的第一天,即星期天
select trunc(sysdate,’dd’) from dual;—2017/2/13,返回当前日期,今天是2017/2/13
select trunc(sysdate ,’HH24’) from dual;—2017/2/13 15:00:00,返回本小时的开始时间
select trunc(sysdate ,’MI’) from dual;—2017/2/13 15:13:00,返回本分钟的开始时间
2.【TRUNC(for number)】TRUNC()函数处理number型数字
语法格式:TRUNC(number[,decimals])
其中: number 待做截取处理的数值;decimals 指明需保留小数点后面的位数,可选项,忽略它则截去所有的小数部分。
注意:截取时并不对数据进行四舍五入。
示例:
select trunc(123.567,2) from dual;—123.56,将小数点右边指定位数后面的截去;
select trunc(123.567,-2) from dual;—100,第二个参数可以为负数,表示将小数点左边指定位数后面的部分截去,即均以0记;
select trunc(123.567) from dual;—123,默认截去小数点后面的部分;