TianyuCool

除了个子长的高,字也写的好

javascript 正则方法 exec()

exec()RegExp对象的主要方法。exec()接受一个参数,即要应用模式的字符串,然后返回包含第一个匹配项信息的数组,或者在没有匹配项的情况下返回null

let reg = /apple (or mac (or ipad)?)?/g;
let str = 'apple or mac or ipad';
let match = reg.exec(str);

console.log(match);
/*
[ 'apple or mac or ipad',
  'or mac or ipad',
  'or ipad',
  index: 0,
  input: 'apple or mac or ipad' ]
*/
console.log(match[0]);      //apple or mac or ipad
console.log(match[1]);      //or mac or ipad
console.log(match[2]);      //or ipad
console.log(match.index);   //0
console.log(match.input);   //apple or mac or ipad
console.log(match instanceof Array);    //true

上面结果返回的虽然是Array的实例,但包含2个额外的属性:indexinput.
index表示匹配项在字符串中的位置,input表示应用正则表达式的字符串。

上面正则表达式中,括号()有2个作用:

  • 在修饰匹配次数时,括号中的表达式可以作为整体被修饰
  • 取匹配结果时,括号中的表达式匹配到的内容可以单独得到

问号?作用(懒惰模式:在可匹配与可不匹配的时候,优先不匹配):

  • 匹配表达式0次或者1次

这个例子中的模式包含2个捕获组。最内部的捕获组匹配‘or ipad’,而包含它的捕获组匹配‘or mac’ 或者 'or mac or ipad'.当把字符串传入exec()方法中后,发现了一个匹配项。因为整个字符串本身与模式匹配,所以返回的数组matchindex属性为0

数组中的第一项是匹配的整个字符串,第二项包含与第一个捕获组匹配的内容,第三项包含与第二个捕获组匹配的内容。

对于exec()方法而言,即使在模式中设置了全局标志g,它每次也只能返回一个匹配项。在不设置全局标志情况下,在同一个字符串上多次调用exec()方法将始终返回第一个匹配项的信息,在设置全局标志的情况下,每次调用exec()则都会在字符串中继续查找新的匹配项。
如下:

let a = 'reactjs,angularjs,vuejs,backbonejs';

let reg = /.js/;

let match = reg.exec(a);

console.log(match);
console.log(match.index);
console.log(reg.lastIndex);

match = reg.exec(a);

console.log(match);
console.log(match.index);
console.log(reg.lastIndex);


输出结果:

[ 'tjs', index: 4, input: 'reactjs,angularjs,vuejs,backbonejs' ]
4
0
[ 'tjs', index: 4, input: 'reactjs,angularjs,vuejs,backbonejs' ]
4
0

下面是加上全局标志:


let a = 'reactjs,angularjs,vuejs,backbonejs';

let reg = /.js/g;

let match = reg.exec(a);

console.log(match);
console.log(match.index);
console.log(reg.lastIndex);

match = reg.exec(a);

console.log(match);
console.log(match.index);
console.log(reg.lastIndex);

结果如下:

[ 'tjs', index: 4, input: 'reactjs,angularjs,vuejs,backbonejs' ]
4
7
[ 'rjs', index: 14, input: 'reactjs,angularjs,vuejs,backbonejs' ]
14
17

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

阅读更多
版权声明:如果这篇文章对你有所帮助,请点个赞~~~ https://blog.csdn.net/qq_35087256/article/details/79966865
文章标签: js exec RegExp
个人分类: javascript 浏览器
上一篇JS获取当前毫秒数汇总
下一篇function中的callee和caller
想对作者说点什么? 我来说一句

正则常用规范

2012年01月14日 3KB 下载

没有更多推荐了,返回首页

关闭
关闭