首页 > 代码库 > ES6小实验-复习正则表达式

ES6小实验-复习正则表达式

正则表达式总是记不住,这一次参考网上一篇的文章好好复习一遍

正则表达式构造函数(四种写法):

var regex = new RegExp(‘xyz‘, ‘i‘)var regex = new RegExp(/xyz/i)var regex = /xyz/i// ES6的写法。ES5在第一个参数是正则时,不允许此时使用第二个参数,会报错。 // 返回的正则表达式会忽略原有的正则表达式的修饰符,只使用新指定的修饰符。// 下面代码返回”i”。new RegExp(/abc/ig, ‘i‘).flags

ECMAScript5明确规定,使用正则表达式字面量必须像直接调用RegExp构造函数一样,每次都创建新的RegExp实例,

var re = null,    ifor( i=0; i < 3; i++) {    re = /cat/g    console.log(re.test("catastrophe"))//true true true    console.log(re.test("catastrophe"))//false false false}

上面之所以出现三个true,是因为每次都创建新的RegExp实例,下面出现三个false,是因为设置了全局标志,第二次调用是从索引为3的字符(上一次匹配的末尾)开始的,这一点要注意。

RegExp的每个实例都有属性:

1.global: 布尔值,表示是否设置了g标志

2.ignoreCase:布尔值,表示是否设置了i标志

3.lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0算起

4.multiline:表示是否设置了m标志

5.source: 正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回

var pattern = /\[bc\]at/iconsole.log(pattern.global)//falseconsole.log(pattern.ignoreCase)//trueconsole.log(pattern.multiline)//falseconsole.log(pattern.lastIndex)//0console.log(pattern.source)//\[bc\]at

RegExp对象主要方法有

1.exec(): 该方法专门为捕获组设计,

var pattern = /[bc]at/ivar str = "batterybat"console.log(pattern.exec(str))//["bat", index: 0, input: "batterybat"]

返回的数组虽然是Array的实例,但包含两个额外的属性:index和input。index表示匹配项在字符串中的位置,input表示应用正则表达式的字符串,有一点要注意:对于exec()方法而言,即使模式中设置了全局标志g,它每次也只返回一个匹配项,在不设置全局标志的情况下,在同一个字符串上多次调用exec()将始终返回第一个匹配项的信息。而在设置了全局标志的情况下,每次调用exec()则都会在字符串中继续查找新的匹配项。test()也是类似,这与字符串的match()方法有区别

var pattern1 = /cat/iconsole.log(pattern1.exec("catastrophe"))//["cat", index: 0, input: "catastrophe"]console.log(pattern1.exec("catastrophe"))//["cat", index: 0, input: "catastrophe"]var pattern2 = /cat/igconsole.log(pattern2.exec("catastrophe"))//["cat", index: 0, input: "catastrophe"]console.log(pattern2.exec("catastrophe"))//null

从下面实验中可以看得更加清楚:

var text = "cat,bat,sat,fat"var pattern2 = /.at/gvar matches = pattern2.exec(text)console.log(matches.index)//0console.log(matches[0])//catconsole.log(pattern2.lastIndex)//3var matches = pattern2.exec(text)console.log(matches.index)//4console.log(matches[0])//batconsole.log(pattern2.lastIndex)//7

在全局模式下,lastIndex的值每次调用exec()后都会增加,而在非全局模式下则始终保持不变。

2. test(),在模式与参数匹配的情况下返回true,否则返回false,

限定符是最容易忘记的,因为比较多,并且又不是经常用,

        [a-z0-9]:匹配括号中的字符集中的任意字符        [^a-z0-9]:匹配任意不在括号中的字符集中的字符        \d:匹配数字        \D:匹配非字符        \w:匹配字母和数字及_        \W: 匹配非字母和数字及_        \0: 匹配null字符        \b: 匹配空格字符        . : 匹配除换行外的任意字符        \n: 匹配换行符        \r: 匹配回车字符        \t: 匹配制表符        \s: 匹配空白字符,空格,制表符,换行符        \S: 匹配非空白字符        ^ : 行首匹配        $ : 行尾匹配         x?: 匹配0或1个x        x*: 匹配0或任意多个x        x+: 匹配至少一个x        (xyz)+:匹配至少一个(xyz)        x{m,n}:匹配最少m个,最多n个x        this|where|logo: 匹配this或where或logo中任意一个 

贪婪量词*和+:js默认是贪婪匹配,也就是说匹配重复字符是尽可能多地匹配。

惰性(最少重复匹配)量词?:当进行非贪婪匹配,只需要在待匹配的字符后面跟随一个?即可。

var reg1 = /a+/;var reg2 = /a+?/;var str = ‘aaab‘;console.log(str.match(reg1)); // ["aaa"]console.log(str.match(reg2)); // ["a"]

 

ES6小实验-复习正则表达式