博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
正则的一个坑
阅读量:6094 次
发布时间:2019-06-20

本文共 869 字,大约阅读时间需要 2 分钟。

 test()方法慎用g

test()检测指定字符串是否存在返回一个布尔值

var  reg=/cat/g;var str='this a cat,this a dog'; console.log(reg.test(str),reg.lastIndex);//true 10console.log(reg.test(str),reg.lastIndex); //false 0

 

按道理两次打印出来都应该是true,true,而最终结果为true,false。

此时我们需要注意啦,在我们定义的正则表达式中后面加上了搜索的方式,g表示全文查找。而且在正则表达式内部有一个lastIndex来记录匹配的位置,第一次调用test()后,那么lastIndex就不再等于0,而是10,当下次在调用该方法的时候,字符串的匹配会从lastIndex位置进行匹配,故最终返回false.所以不要随意添加g.
遇到此种情况后的解决方法:
1.去除g;
2.在第二次使用前,设置reg.lastIndex=0即可。

3.加个判断,判断当前输入框内容和上一次匹配的内容是否一样,如果一样就不匹配了

不一样才匹配

 

哪么正则加g和不加g有什么区别楞

1,g记录成功的lastIndex  下次支配同一个字符串就直接从记录的lastIndex位置开始

而不是从头开始了

2、如果你不带g,在正则过程中,字符串是从左至右匹配的,如果匹配成功就不再继续向右匹配了,如果你带g,它会重头到尾的把正确匹配的字符串挑选出来

var str = 'aaaaaaaa'var reg1 = /a/var reg2 = /a/gstr.match(reg1)  // 结果为:["a", index: 0, input: "aaaaaaaa"]str.match(reg2)  // 结果为:["a", "a", "a", "a", "a", "a", "a", "a"]

 

转载于:https://www.cnblogs.com/liuxionghui/p/9271978.html

你可能感兴趣的文章
H5禁止底部横向滚动条,使一个元素居中
查看>>
android 的安全问题
查看>>
skatebroads
查看>>
一些常用的命令和cheat sheet
查看>>
转----------数据库常见笔试面试题 - Hectorhua的专栏 - CSDN博客
查看>>
Android 界面设计 java.lang.NullPointerException 异常的解决方法
查看>>
解决ctrl+shift+F快捷键eclipse格式化与输入法简繁转换冲突问题
查看>>
kali在vbox上运行设置共享文件夹
查看>>
【观点】程序员的七大坏毛病
查看>>
一起谈.NET技术,Mono向Mac OS应用程序开发示好
查看>>
Spring学习(16)--- 基于Java类的配置Bean 之 基于泛型的自动装配(spring4新增)...
查看>>
实验八 sqlite数据库操作
查看>>
四种简单的排序算法(转)
查看>>
Quartz2D之着色器使用初步
查看>>
多线程条件
查看>>
Git [remote rejected] xxxx->xxxx <no such ref>修复了推送分支的错误
查看>>
Porter/Duff,图片加遮罩setColorFilter
查看>>
黄聪:VMware安装Ubuntu10.10【图解】转
查看>>
Centos 6.x 升级openssh版本
查看>>
公式推♂倒题
查看>>