当前位置:首页 > 日记 > 正文

JS中正则表达式要注意lastIndex属性

JS中正则表达式要注意lastIndex属性

 说明

这篇文章,主要和大家聊聊JavaScript中RegExp对象的属性。

解释

每个RegExp对象都包含5个属性,source、global、ignoreCase、multiline、lastIndex。

source:是一个只读的字符串,包含正则表达式的文本。

var reg = /JavaScript/;reg.source; //返回 JavaScript

global:是一个只读的布尔值,看这个正则表达式是否带有修饰符g。

修饰符g,是全局匹配的意思,检索字符串中所有的匹配。

var str = "JavaScript";str.match(/JavaScript/); //只能匹配一个JavaScript var str = "JavaScript JavaScript";str.match(/JavaScript/g); //能匹配两个JavaScript var reg = /JavaScript/;reg.global; //返回 falsevar reg = /JavaScript/g;reg.global; //返回 true

ignoreCase:是一个只读的布尔值,看这个正则表达式是否带有修饰符i。

修饰符i,说明模式匹配是不区分大小写的。

var reg = /JavaScript/;reg.ignoreCase; //返回 falsevar reg = /JavaScript/i;reg.ignoreCase; //返回 truevar reg = /JavaScript/;reg.test("javascript"); //返回 falsevar reg = /JavaScript/i;reg.test("javascript"); //返回 true

multiline:是一个只读的布尔值,看这个正则表达式是否带有修饰符m。

修饰符m,用以在多行模式中执行匹配,需要配合^ 和 $</code> 使用,使用<code>^</code> 和 <code>$ 除了匹配整个字符串的开始和结尾之外,还能匹配每行的开始和结尾。

var str="java\nJavaScript";str.match(/^JavaScript/); //返回nullvar str="java\nJavaScript";str.match(/^JavaScript/m); //匹配到一个JavaScriptvar reg=/JavaScript/;reg.multiline; //返回falsevar reg=/JavaScript/m;reg.multiline; //返回true

lastIndex:是一个可读/写的整数,如果匹配模式中带有g修饰符,这个属性存储在整个字符串中下一次检索的开始位置,这个属性会被exec( ) 和 test( ) 方法用到。

exec( )方法是在一个字符串中执行匹配检索,如果它没有找到任何匹配,它就返回null,但如果它找到了一个匹配,它就返回一个数组。

当调用exec( )的正则表达式对象具有修饰符g时,它将把当前正则表达式对象的lastIndex属性设置为紧挨着匹配子串的字符位置,当同一个正则表达式第二次调用exec( ),它会将从lastIndex属性所指示的字符串处开始检索,如果exec( )没有发现任何匹配结果,它会将lastIndex重置为0。

test( )方法,它的参数是一个字符串,用test( )对某个字符串进行检测,如果包含正则表达式的一个匹配结果,则返回true,否则返回false。

var str="java";var reg=/JavaScript/;reg.test(str); //返回falsevar str="JavaScript";var reg=/JavaScript/;reg.test(str); //返回true

当调用test( )的正则表达式对象具有修饰符g时,它的行为和exec( )相同,因为它从lastIndex指定的位置处开始检索某个字符串,如果它找到了一个匹配结果,那么它就立即设置lastIndex为紧挨着匹配子串的字符位置

看看下面这段有趣的代码

var str="JavaScript";var reg=/JavaScript/g;console.log(reg.test(str)); //打印 trueconsole.log(reg.test(str)); //打印 false

为什么同样的字符串,同样的正则表达式,却打印的不一样,如果你已经理解了 lastIndex属性,那你一定明白为什么。

我们来看看到底发什么了什么

var str="JavaScript";var reg=/JavaScript/g;console.log(reg.test(str)); //打印 trueconsole.log(reg.lastIndex);//打印10,因为匹配到了JavaScript,所以设置lastIndex为匹配结果紧挨着的字符位置console.log(reg.test(str));//打印 false,因为从lastIndex位置检索字符串,已经没有匹配结果了console.log(reg.lastIndex);//打印0,因为没有匹配到结果,所以将lastIndex重置为0

这里注意一点,如果第一次调用test( )匹配结束后,我们手动将lastIndex重置为0,那么第二次调用test( ),同样可以打印true

var str="java JavaScript java";var reg=/JavaScript/g;console.log(reg.test(str)); //打印 truereg.lastIndex=0;console.log(reg.test(str)); //打印 true

在强调一次,上面说的关于lastIndex的问题,都是因为正则表达式对象中带有修饰符g,如果不带有修饰符g,就不用担心这些问题了。

总结

这次主要是说说,JavaScript中正则表达式对象的5个属性,而最需要注意的就是lastIndex属性了。

相关文章

Windows7安装IIS的方法-Win7安装II

Windows7安装IIS的方法-Win7安装II

安装,方法,教程,电脑软件,IIS,如果想在Windows7下安装IIS,首先确定你的Win7版本。必须是Windows7旗舰版、Windows7专业版或者Windows7企业版才有IIS组件,而Win7 Home(家庭版)是没有IIS的。Windows7安装IIS7的方法其实icech发现Windows7旗舰版安…

photoshop怎么使用置换滤镜?

photoshop怎么使用置换滤镜?

滤镜,电脑软件,photoshop,photoshop是一个很有趣的软件,我们可以通过它来实现很多看起来比较高大上的效果。今天,小编就来向大家介绍photoshop中一个不太被注意到的,但是比较有用和好玩的滤镜效果&mdash;&mdash;置换滤镜,通过它我们可以实现&ld…

win10 defender如何隐藏

win10 defender如何隐藏

电脑软件,defender,Windows 10 至发布以来就内置集成了 Windows Defender 安全防护应用,但有许多用户平常压根儿就没注意到它的存在。微软为了使安全防护功能更加明显,Windows 10 周年更新中将 Windows Defender 图标列到了任务栏通知区域,以…

JS点击缩略图整屏居中放大效果

JS点击缩略图整屏居中放大效果

缩略图,效果,电脑软件,JS,需要实现的效果图:今天开发的时候,遇到要点击缩略图之后居中显示图片的大图查看(大致效果如上图所示)~想了好几种实现方式,最开始的时候,是想通过animate来点击图片进行显示,可是后来当我想要让放大的图片进行居中显示和…

怎么把新浪微博账号注销

怎么把新浪微博账号注销

账号,注销,新浪微博,电脑软件,就在最近,新浪微博悄悄的推出了注销账号的通道。但是注销账号通道很隐蔽,一些用户不清楚怎么操作,那么下面小编就为大家带来了微博账号的注销教程,希望对你有所帮助。微博app账号注销的方法:1、如果想要将自己的微…

性能优化之代码优化页面加载速度

性能优化之代码优化页面加载速度

页面加载,代码优化,性能优化,速度,电脑软件,页面代码的优化对于页面加载速度也有不小的影响,最广为人知的:HTML头部的JavaScript和写在HTML标签中的Style会阻塞页面的渲染,因此CSS放在页面头部并使用Link方式引入,JavaScript的引入放在页面尾。…

PHP实现链式操作的三种方法详解

PHP实现链式操作的三种方法详解

方法,操作,链式,三种,详解,本文实例讲述了PHP实现链式操作的三种方法。分享给大家供大家参考,具体如下:在php中有很多字符串函数,例如要先过滤字符串收尾的空格,再求出其长度,一般的写法是:strlen(trim($str))如果要实现类似js中的链式操作,比如像…

斜箭头符号图案大全

斜箭头符号图案大全

箭头,图案,符号,大全,电脑软件,斜箭头符号在很多地方都会被用到,比如图表中、游戏名字以及个性QQ资料,箭头符号一般作指方向目标之用。但是斜箭头怎么打呢?还是按照惯例先给大家列出斜箭头符号大全,方便不是经常使用或不需要了解教程的同学直接…

ps怎么设计动态波浪显示的文字动画

ps怎么设计动态波浪显示的文字动画

动态,波浪,文字,显示,动画,ps中想要设计一个不断扭曲晃动的文字,该怎么设计呢?下面我们就来看看详细的教程。软件名称:Adobe Photoshop CS5 V12.0 官方简体中文破解版软件大小:981.4MB更新时间:2014-04-281、首先启动Photoshop cs5,执行文件-打开…

js禁止Backspace键使浏览器后退的

js禁止Backspace键使浏览器后退的

方法,浏览器,电脑软件,js,Backspace,在项目中遇到按下Backspace键让浏览器后退的问题,上网搜了几种解决方案都不太理想。于是集众人之智,采众家之长,归纳如下:1、在公用js中定义阻止Backspace的方法function banBackSpace(e){ var ev = e || wi…

JavaScript 值类型和引用类型的初

JavaScript 值类型和引用类型的初

值类型,推荐,引用类型,电脑软件,JavaScript,值类型:也称为原始数据或原始值(primitive value)。这类值存储在栈(stack)中,栈是内存中一种特殊的数据结构,也称为线性表,栈按照后进先出的原则存储数据,先进入的数据被压入栈底,最后插入(push)的数据放在栈…

Laravel5.5新特性之友好报错以及展

Laravel5.5新特性之友好报错以及展

新特性,报错,详解,友好,电脑软件,前言期待已久的laravel5.5 很快将为大家呈现,本文将给大家详细介绍关于Laravel5.5新特性之友好报错及展示的相关内容,分享出来供大家参考学习,话不多说了,来一起看看详细的介绍:Laravel5.5 获取源代码如今Larave…