当前位置: 首页 > Web前端 > HTML5

简单来说,正则表达式——注意lastIndex属性

时间:2023-04-05 23:07:50 HTML5

说明本文主要讲JavaScript中RegExp对象的属性。说明每个RegExp对象包含5个属性,source、global、ignoreCase、multiline、lastIndex。source:是一个只读字符串,包含正则表达式的文本。varreg=/JavaScript/;reg.source;//返回JavaScriptglobal:是一个只读的布尔值,看这个正则表达式有没有修饰符g。修饰符g表示全局匹配,检索字符串中的所有匹配项。varstr="JavaScript";str.match(/JavaScript/);//只匹配一个JavaScriptvarstr="JavaScriptJavaScript";str.match(/JavaScript/g);//可以匹配两个JavaScriptvarreg=/JavaScript/;reg.global;//返回falsevarreg=/JavaScript/g;reg.global;//返回trueignoreCase:是一个只读的布尔值,看这个正则表达式是否有修饰符i。修饰符i,表示模式匹配不区分大小写。varreg=/JavaScript/;reg.ignoreCase;//返回假varreg=/JavaScript/i;reg.ignoreCase;//返回真varreg=/JavaScript/;reg.test("javascript");//返回falsevarreg=/JavaScript/i;reg.test("javascript");//返回truemultiline:是一个只读的布尔值,看这个正则表达式是否有修饰符m。修饰符m用于在多行模式下执行匹配。它需要与^和$一起使用。使用^和$除了可以匹配整个字符串的开头和结尾之外,还可以匹配每一行的开头和结尾。varstr="java\nJavaScript";str.match(/^JavaScript/);//返回空值varstr="java\nJavaScript";str.match(/^JavaScript/m);//匹配一个JavaScriptvarreg=/JavaScript/;reg.multiline;//返回假varreg=/JavaScript/m;reg.multiline;//returntruelastIndex:是一个可读/可写的整数,如果匹配模式中有g修饰符,则存储该属性该属性在下一次搜索的起始位置被exec()和test()方法使用整个字符串。exec()方法在字符串中搜索匹配项,如果未找到任何匹配项,则返回null,但如果找到匹配项,则返回一个数组。当调用exec()的正则表达式对象带有修饰符g时,会将当前正则表达式对象的lastIndex属性设置为匹配子串的下一个字符位置,当同一个正则表达式第二次调用exec()时,它会从lastIndex属性指示的字符串开始搜索,如果exec()没有找到任何匹配的结果,它会将lastIndex重置为0。参数为字符串的test()方法使用test()来检测一个某个字符串,如果包含正则表达式的匹配结果,则返回true,否则返回false。varstr="java";varreg=/JavaScript/;reg.test(str);//返回错误varstr="JavaScript";varreg=/JavaScript/;reg.test(str);//returntruewhen当调用test()的正则表达式对象有修饰符g时,它的行为和exec()一样,因为它从lastIndex指定的位置开始检索一个字符串,如果找到匹配,它立即将lastIndex设置为匹配子字符串旁边的字符位置。看看下面有趣的代码varstr="JavaScript";varreg=/JavaScript/g;console.log(reg.test(str));//打印trueconsole.log(reg.test(str));//打印false为什么同一个字符串同一个正则表达式打印出来的不同。如果你了解了lastIndex属性,那么你一定明白为什么。让我们看看发生了什么varstr="JavaScript";varreg=/JavaScript/g;console.log(reg.test(str));//printtrueconsole.log(reg.lastIndex);//打印10,因为匹配到JavaScript,所以将lastIndex设置为匹配结果旁边的字符位置console.log(reg.test(str));//打印false,因为从lastIndex位置取字符串时没有匹配结果console.log(reg.lastIndex);//打印0,因为没有匹配结果,所以重新设置lastIndex为0这里注意,如果第一次调用test()匹配结束后,我们手动将lastIndex重置为0,然后第二次调用test()也可以打印truevarstr="javaJavaScriptjava";varreg=/JavaScript/g;console.log(reg.test(str));//打印truereg.lastIndex=0;console.log(reg.test(str));//打印true强调一次,上面提到的lastIndex的问题是因为正则表达式对象有修饰符g,如果没有修饰符g,就不用担心这些问题。综上所述,这次主要讲JavaScript中正则表达式对象的五个属性,其中最需要关注的就是lastIndex属性。