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,默认截去小数点后面的部分;