全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

javascript 使用正则test( )第一次是 true,第二次是false

1.前言

今天朋友问我一个问题,我现在需要多次匹配同一个内容,但是为什么我第一次匹配,直接是 true,而第二次匹配确实 false 呢?

var s1 = "MRLP";
var s2 = "MRLP";
var reg = /mrlp/ig;
console.log(reg.test(s1));
console.log(reg.test(s2));

这时候你会发现,我们在连续使用一个正则匹配其他字符串的时候,第一次匹配是 true,而第二次匹配则是 false。

等等,WHT?我匹配的是 MRLP,而且我还特意加上i 用于不区分大小写,可以为什么第一次可以正常匹配,第二次就不行了呢?

这也就是我今天要跟大家说的,关于 JS 中的 lastIndex。

2. lastIndex

在开始讲解之前,首先先带大家简单回顾一下 JS中正则表达式的使用方式。

JS 中正则表达式的使用方式有两种:

第一种是正则表达式对象的方法,常用方法有两个。

  • exec(str) : 检索字符串中指定的值。返回找到的值,并确定其位置
  • test(str) : 检索字符串中指定的值。返回 true 或 false

第二种是字符串对象的方法,常用方法有四个。

  1. match(regexp) : 找到一个或多个正则表达式的匹配
  2. replace(regexp) : 替换与正则表达式匹配的子串
  3. search(regexp) : 检索与正则表达式相匹配的值
  4. split(search) : 把字符串分割为字符串数组

而这些方法和咱们今天所说的 lastIndex 有什么关系呢?

lastIndex 属性用于规定下次匹配的起始位置。

上次匹配的结果是由方法 RegExp.exec( ) 和 RegExp.test( ) 找到的,它们都以 lastIndex 属性所指的位置作为下次检索的起始点。

这样,就可以通过反复调用这两个方法来遍历一个字符串中的所有匹配文本。

而且需要注意,该属性只有设置标志 g才能使用。

既然已经知道这个东西的形成原因,那么解决起来就非常简单了。

3.解决方案

3.1 第一种解决方案

如上面所述,我们 lastIndex 属性必须要设置 g 标签才能使用。

那么我们在匹配的时候,可以根据情况,直接去掉 g 标签就可以啦。

var s1 = "MRLP";
var s2 = "MRLP";
var reg = /mrlp/i;
console.log(reg.test(s1)); //true
console.log(reg.test(s2)); //true

3.2 第二种解决方案

很多时候,我们必须要执行 全局匹配( g ),这时候就不能使用第一种方案了。

其实,我们的lastIndex 属性是可读可写的。

只要目标字符串的下一次搜索开始,就可以对它进行设置。

当方法 exec() 或 test() 再也找不到可以匹配的文本时,它们会自动把 lastIndex 属性重置为 0。

这样,我们再次执行全局匹配的时候,就不会出现 false 的情况了。

var s1 = "3206064928:MRLP:3206064928";
var s2 = "MRLP";
var reg = /mrlp/ig;
console.log(reg.test(s1)); //true
console.log(reg.lastIndex);  //reg.lastIndex = 15
reg.lastIndex = 0;     //这里我将 lastIndex 重置为 0
console.log(reg.test(s2)); //true

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# 使用正则test(  # )第一次是  # true第二次是false  # 正则test(  # )  # Python解惑之True和False详解  # java 中 request.getSession(true、false、null)的区别  # 细数Ajax请求中的async:false和async:true的差异  # 详谈Ajax请求中的async:false/true的作用(ajax 在外部调用问题)  # javascript中return  # return true  # return false三者的用法及区别  # Python返回真假值(True or False)小技巧  # C/C++实操True and false详解  # 正则表达式  # 第一种  # 就可以  # 第二种  # 的是  # 这时候  # 下次  # 我还  # 多个  # 必须要  # 我现在  # 是由  # 则是  # 找不到  # 遍历  # 问我  # 这也  # 这两个  # 希望能  # 就是我 


相关文章: 利用JavaScript实现拖拽改变元素大小  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  微信小程序 input输入框控件详解及实例(多种示例)  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  建站中国官网:模板定制+SEO优化+建站流程一站式指南  如何选择高效便捷的WAP商城建站系统?  如何选择适配移动端的WAP自助建站平台?  专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  文字头像制作网站推荐软件,醒图能自动配文字吗?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  ,如何利用word制作宣传手册?  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  如何在局域网内绑定自建网站域名?  网站制作员失业,怎样查看自己网站的注册者?  如何用美橙互联一键搭建多站合一网站?  如何快速查询域名建站关键信息?  子杰智能建站系统|零代码开发与AI生成SEO优化指南  建站之星多图banner生成与模板自定义指南  C#怎么使用委托和事件 C# delegate与event编程方法  网页设计网站制作软件,microsoft office哪个可以创建网页?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  建站主机选购指南:核心配置优化与品牌推荐方案  c# 在高并发下使用反射发射(Reflection.Emit)的性能  如何制作网站标识牌,动态网站如何制作(教程)?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  建站之星后台管理:高效配置与模板优化提升用户体验  建站之星CMS五站合一模板配置与SEO优化指南  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  香港服务器WordPress建站指南:SEO优化与高效部署策略  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  平台云上自助建站如何快速打造专业网站?  太平洋网站制作公司,网络用语太平洋是什么意思?  建站之星如何助力网站排名飙升?揭秘高效技巧  ,sp开头的版面叫什么?  如何在企业微信快速生成手机电脑官网?  智能起名网站制作软件有哪些,制作logo的软件?  红河网站制作公司,红河事业单位身份证如何上传?  建站之星官网登录失败?如何快速解决?  制作销售网站教学视频,销售网站有哪些?  建站之星如何优化SEO以实现高效排名?  如何在万网ECS上快速搭建专属网站?  建站之星如何实现网站加密操作?  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  电商网站制作价格怎么算,网上拍卖流程以及规则?  如何高效搭建专业期货交易平台网站?  代刷网站制作软件,别人代刷火车票靠谱吗?  制作网站的过程怎么写,用凡科建站如何制作自己的网站?  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  建站之星后台管理系统如何操作? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。