最近状况有些糟糕,健康陪伴了我两年的电脑,硬盘彻底报废,大学里积攒的所有数据全部丢失(怪我没有备份),主板也烧了好几处,导致现在发不出声音。另外,由于为了修电脑,跑动跑西,我竟然错过了携程和滴滴出行的两场校招笔试!唉,祸不单行啊,希望情况能快点好起来,校招季不好熬-_-
什么是正则表达式
开头先来推荐两个正则表达式可视化工具: REGEXPER和RegExr。
再来推荐一个适合用来查询的文档:MSDN正则参考手册.aspx)。
正则表达式(Regular Expression)是我们处理字符串的利器,它主要用来描述匹配字符串的规则,主要来解决字符串的查找和替换两大需求。这里就结合js来总结一下正则表达式的用法。
基本使用
正则表达式包括普通字符(比如a到z之间的字母)和元字符。
而元字符又包含了单字符元字符和多字符元字符。
单字符元字符
以下总结了单字符元字符及其行为。
| 1 2 3 4 5 6 7 8 9 10 11 12 13
 | *      +      ?             ^             $      .      []     {}     ()     |      \     
 | 
多字符元字符
以下列出了多字符元字符以及他们的行为:
| 1 2 3 4 5 6 7 8 9 10 11 12
 | \b     \B     \d     \D     \w     \W     (模式)     (?:模式)   (?=断言)   (?!断言)   \num                 
 | 
非打印字符
此外还有一些非打印字符:
优先级
优先级从高到低依次如下:
| 1 2 3 4 5
 | \                            (), (?:), (?=), (?!), []     *, +, ?, {n,m}               ^, $, /                      |                           
 | 
正向前瞻与负向前瞻
前瞻分为正向前瞻和负向前瞻。
正向前瞻:比如/(?=XXX).*/,它的作用是对后面要匹配的内容做一个预判断,如果后面的内容是XXX,则此段内容匹配成功,继续向后匹配。
负向前瞻:比如/(?!xxx).*/,它的作用是对后面要匹配的内容做一个预判断,如果后面的内容是XXX,则此段内容匹配失败,跳过去重新开始匹配。
我们来看一个实例:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
 | var reg = /\w+(?=ing)/g; var str = 'cooking eating'; str.match(reg);               var reg = /\d(?!px)/g; var myStr = '1pt 2px 3em 4px'; str.match(reg);             
 | 
贪婪与懒惰
正则表达式默认为贪婪模式,即尽可能多的匹配。
如果想使用非贪婪模式,只需要在量词(*,+,?,{n,m})之后加上?即可。
| 1 2 3 4 5 6 7 8 9 10 11
 | var reg = /\d{3,6}/g; var myStr = '123456789'; str.match(reg);              var reg = /\d{3,6}?/g; var myStr = '123456789'; str.match(reg);             
 | 
反向引用
反向引用,即引用捕获组匹配到的引用,它既可以在正则表达式内部进行引用,也可以在正则表达式外部进行引用。
捕获组包括两种:普通捕获组和命名捕获组。
普通捕获组

再看一个案例:
| 1 2 3 4 5 6 7 8 9 10 11
 | var reg = /(\d{4})-(\d{2})-(\d{2})/; var str = '2016-09-20'; var newStr = str.replace(reg, '$1/$2/$3') var reg = /(\d)\d\1\1\1/g; var str = '12111 234 65666'; str.match(reg);      
 | 
命名捕获组

但是,js目前还不支持命名捕获组。
js中使用正则表达式
js中使用RegExp和String两个对象的某些方法都可以使用正则表达式。
RegExp的test()
test方法很简单,看正则表达式与指定字符串是否匹配。返回true或者false。
RegExp的exec()
来看一个实例:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
 | var reg = /(\w+)ing\s(\w+)/g; var str = 'eating apple eating orange'; var ret = reg.exec(str);          var lastIndex = reg.lastIndex;    var ret2 = reg.exec(str);         var lastIndex2 = reg.lastIndex;   var ret3 = reg.exec(str);         var lastIndex3 = reg.lastIndex;   var index1 = ret.index;       var index2 = ret2.index;      var input = ret.input;        var ignorCase = reg.ignorCase;      var global = reg.global;            var multiline = reg.multiline;      var source = reg.source;           
 | 
String的方法
String类型也提供了一些可以使用正则表达式的方法,具体如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
 | var str = 'xu0wen123jiang456789'; var index = str.search(reg);       var rets = str.match(reg);         var arrs = str.split(reg);         var newStr = str.replace(reg, '0');    
 | 
一个案例
| 1 2 3 4 5 6 7 8 9
 | var reg = /\d/g; var str = 'a1b2c3d4'; var newStr = str.replace(reg, (match, index, origin) => {   return parseInt(match) + 1; });                                   
 |