欢迎光临
我的个人博客网站

ES6-正则新增(复习+学习)


ES6-正则

昨天,复习了正则的基本知识,今天学习ES6新增的正则的知识,做一个总结笔记,大家可以先看4,5对应的方法然后再从头看,话不多说直接上:

 

1.RegExp构造函数的区别

2.新增的修饰符

3.新增属性

4.字符串对应的正则方法(API文档)

5.RegExp对应的方法(API文档)

 

 

直接开始上手:

 

 

 

 

1.RegExp构造函数的区别

 1 //ES5中也有相应的正则构造函数,首先复习一下ES5的RegExp构造函数,创建方法  2 var demo = /abc/g;   //字面量  3 var demo = new RegExp('abc','i');   //构造函数创建,第一个为字符串,第二个参数为修饰符  4 var demo = new RegExp(/abc/i);     //直接构造函数创建,参数为正则表达式,返回的也是一个正则表达式  5  6  7 //ES6新增区别  8 //我们知道,我们的正则表达式可能修饰符需要经常的更换,想通过一个构造函数,重新更换一个原来的正则表达式的修饰符,ES5不提供简便的操作,但是新增的ES6提供了一个新的方法,就是增多了一个RegExp构造函数的第二个参数(放置修饰字符),可以更改修饰符  9 10 var demo1 = new RegExp('abc', 'i'); 11         console.log(demo1);       // /abc/i 12 var demo2 = new RegExp(demo1, 'ig');   13         console.log(demo2);     // /abc/gi 14

 


 

 

 

 

 

 

2.新增的修饰符

 

2.1 u修饰符

//u表示Unicode编码字符,大家知道,一般的字符基本都是UTF-8或者UTF-16编码的,基本都是2字节或者1个字节存储,我之前写的字符的表示就说明过这一点,那么超过Unicode编码uFFFF的时候,那么就需要有两个字节表示,js不能更好的处理,因此,为了解决这一个问题,ES6新增的u修饰符,可以正常处理4个字节的UTF-16编码,总之,处理Unicode编码字符加上u就行了。

 1 //(1) . 字符(除了换行外其他所有的单个字符,不包括编码大于uFFFF)  2 //加上u修饰符,就可以解决 . 字符无法识别编码大于uFFFF的字符了  3 var s = '𠮷';  //之前也是这个例子,理解就好  4 /^.$/.texs(s)  //false  5 /^.$/u.texs(s)  //true  6 //(2)识别Uncode的时候,ES6新增了大括号的形式,当然加上u修饰符  7 /u{32}/.test('a');   //false  8 /u{32}/u.test('a');  //true  9 //(3)i修饰符直接识别大小写,利用Unicode编码识别,需要加上u,这点就不举例子了,涉及到Unicode编码的正则,直接加u 10  

 

 

 

2.2 y修饰符

 1 //g 为全局匹配,y 也是全局匹配,但是y匹配有“粘性”之称,就是在匹配一次后,接上剩余的从第一位开始匹配,而g则匹配剩下的,只要有匹配成功即可;  2 var s = "aaaa_aaa_aa";  3         var r1 = /a+/g;  4         var r2 = /a+/y;  5         console.log(r1.exec(s));    // aaaa  6         console.log(r2.exec(s));        //aaaa  7         console.log(r1.exec(s));    // aaa  8         console.log(r2.exec(s));    // null  从剩余的 _ 开始,不成功  9 //当然配合着其中的指定匹配更能说明问题,利用lastIndex,当然从指定位置开头就需要有匹配(不再举例子) 10 //y修饰符还有一个作用就是不会忽略非法字符,而g修饰符会忽略非法字符,而且y字符不会有溜掉的字符,具体应用自行查找 11  

 

 

 

 

2.3 s修饰符

1 //介绍s修饰符之前,先说一下‘行终止符’ 2 n,r 3 // . 不匹配n r等行终止符,所以ES6新增了s修饰符,于是有了dotALL模式的说法(所有字符) 4 //如果利用 . 修饰符 想达到dotALL模式的话,需要加上s修饰符 5 //当然,还有dotALL一个属性,返回一个布尔值,表示是否处于dotALL模式下,这点做一个了解 6  

 

 

 

 

3.新增属性

1 //1.sticky 属性 2 //返回布尔值,表示是否使用了y修饰符 3 //2.flags 属性 4 //返回正则表达式修饰符,与之对应的有ES5中的source属性,source 属性返回一个值为当前正则表达式对象的模式文本的字符串,该字符串不会包含正则字面量两边的斜杠以及任何的标志字符 5  

 

 

 

 

 

 

4.字符串对应的正则方法

 

4.1.match()

 1 //1.RegExp.prototype[@@match]()  2 // 对正则表达式匹配字符串时,[@@match]()方法用于获取匹配结果;match 的目标参数是String,match 方法会返回一个数组,它包括整个匹配结果,和通过捕获组匹配到的结果,如果没有匹配到则返回null,还是利用了String.prototype.match()的方法,因此下面几个例子就不介绍RegExp了,直接写String的笔记  3 regexp[Symbol.match](str);  4  5 //使用方法  6 /a/[Symbol.match]('abc');  7 //demo  8 var re = /[0-9]+/g;  9 var str = '2016-01-02'; 10 var result = re[Symbol.match](str); 11 console.log(result);  // ["2016", "01", "02"] 12 13 14 //2.String.prototype.match()  15 //match() 方法检索返回一个字符串匹配正则表达式的结果。 16 str.match(regexp)  //参数为正则表达式 17 //返回值: 18 //有修饰符g的话 , 返回匹配所有结果 19 //没有g,则返回第一个匹配结果 20 21 22 //注意:如果正则表达式不包含 g 标志,str.match() 将返回与 RegExp.exec(). 相同的结果 23  

 

 

4.2.splite()

 1 //String.prototype.split()  2 //split() 方法使用指定的分隔符字符串将一个String对象分割成子字符串数组,以一个指定的分割字串来决定每个拆分的位置。   3 //在这里可以利用正则表达式,进行拆分然后返回到一个数组  4  var myString = "Hello 1 word. Sentence number 2.";  5         var splits = myString.split(/(d)/);  6         console.log(splits);  7 //0: "Hello "  8 1: "1"  9 2: " word. Sentence number " 10 3: "2" 11 4: "." 12 length: 5

 

 

 

 

4.3.search()

1 //String.prototype.search() 2 //search() 方法执行正则表达式和 String 对象之间的一个搜索匹配。 3 //返回值:如果匹配成功,则 search() 返回正则表达式在字符串中首次匹配项的索引; 4 //demo 5 var str = "hey JudE"; 6 var re = /[A-Z]/g; 7 var re2 = /[.]/g; 8 console.log(str.search(re)); // returns 4, which is the index of the first capital letter "J" 9 console.log(str.search(re2)); // returns -1 cannot find '.' dot punctuation

 

 

 

4.4.replace()

 1 //String.prototype.replace()  2 //replace() 方法返回一个由替换值(replacement)替换部分或所有的模式(pattern)匹配项后的新字符串。模式可以是一个字符串或者一个正则表达式,替换值可以是一个字符串或者一个每次匹配都要调用的回调函数。如果pattern是字符串,则仅替换第一个匹配项,全局应用的时候,需要加g。  3 str.replace(regexp|substr, newSubStr|function)  4  5 //regexp (pattern)  6 一个RegExp 对象或者其字面量。该正则所匹配的内容会被第二个参数的返回值替换掉。  7 substr (pattern)  8 一个将被 newSubStr 替换的 字符串。其被视为一整个字符串,而不是一个正则表达式。仅第一个匹配项会被替换。  9 newSubStr (replacement) 10 用于替换掉第一个参数在原字符串中的匹配部分的字符串。该字符串中可以内插一些特殊的变量名。参考下面的使用字符串作为参数。 11 function (replacement) 12 一个用来创建新子字符串的函数,该函数的返回值将替换掉第一个参数匹配到的结果。参考下面的指定一个函数作为参数。 13 //返回一个部分或全部匹配由替代模式所取代的新的字符串 14 15 16 //此节重点看正则应用

 

 

 

 

 

 

 

 

5.RegExp对应的方法

 1 //1.RegExp.prototype.exec()  2 //exec() 方法在一个指定字符串中执行一个搜索匹配。返回一个结果数组或 null。  3 regexObj.exec(str)  //参数需要一个字符串  4 //返回结果数组,但是只返回一个  5  6 //2.RegExp.prototype.test()  7 //test() 方法执行一个检索,用来查看正则表达式与指定的字符串是否匹配。返回 true 或 false。  8 regexObj.test(str) //参数为字符串  9 //返回布尔值,true或者false 10 11 //其他有需要自行搜索

 

 

 

 



 

 

 

 

本次内容看书和web文档进行学习和复习,继续加油!!!!

 

ES6-正则新增(复习+学习)

 

 

 

赞(0) 打赏
未经允许不得转载:张拓的天空 » ES6-正则新增(复习+学习)
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

专业的IT技术经验分享 更专业 更方便

联系我们本站主机

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏