正则表达式test()方法是让它的参数字符串完全匹配么?还是部分匹配就能返回true啊!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式test()方法是让它的参数字符串完全匹配么?还是部分匹配就能返回true啊!相关的知识,希望对你有一定的参考价值。
如:参数是"this a cat" 表达式reAt=/at/g;执行test后的值是什么?
test只是验证字符串与正则是否匹配的真假值至于完全匹配还是部分匹配区别于你的表达式
比如正则中有^和$来界定开始和结尾的字符串,如果你要匹配一个以a开头,以t结束的字符串,那么正则就应该写成/^at$/g;这个时候this a cat 返回的就是 false
而/at/g只是匹配字符串中是否存在at,显然这里是存在的,跟它们所处的位置无关,存在既返回true 参考技术A 只要找到匹配正则条件的数据,就返回true。
var a='this is a cat';
var b=/at/gi;
var c=/kat/gi;
alert(b.test(a));//true
alert(c.test(b));//false本回答被提问者采纳 参考技术B 正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与其中位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只要 参考技术C true 参考技术D true
JS正则表达式从入门到入土—— test方法以及它的那些坑
test方法
test方法介绍
RegExp.prototype.test(str)
test方法用于测试字符串参数中是否存在匹配正则表达式模式的字符串
test方法的使用
let reg = /w/
reg.test(‘a‘) // true
reg.test(‘$‘) // false
通过结果可以看出,如果测试字符串参数存在匹配正则表达式模式的字符串则返回true,否则返回false
test方法的那些坑
当正则表达式使用了全局匹配时,test方法会出现如下的这种奇怪现象:
let reg = /w/g
reg.test(‘ab‘) // true
reg.test(‘ab‘) // true
reg.test(‘ab‘) // false
reg.test(‘ab‘) // true
可以看到,每轮的第三次匹配返回会变为true,但是,ab
不是都符合reg吗,返回都应该返回true才对。原因就在于上一节提到过的lastIndex属性。
我们可以试试每次都运行test方法都打出reg的lastIndex方法:
let reg = /w/g
reg.lastIndex // 0
reg.test(‘ab‘) // true
reg.lastIndex // 1
reg.test(‘ab‘) // true
reg.lastIndex // 2
reg.test(‘ab‘) // false
reg.lastIndex // 0
reg.test(‘ab‘) // true
reg.lastIndex // 1
看看结果,然后回忆下lastIndex的定义,你就明白原因了。
lastIndex属性是当前表达式匹配内容的最后一个字符的后一位,用于规定下一次匹配的起始位置。
当进入正则表达式全局模式时,每次使用test方法都会从lastIndex开始,匹配从lastIndex开始的子字符串。比如例子中,第二次执行test方法时,此时,lastIndex已经变为2,子字符串为空,所以reg不可能匹配上它。由于子字符串匹配失败,test方法返回false,并将lastIndex属性置为0,重新开始一轮循环。
避免test中的坑的方法
第一种方法:test方法本身就是用来测试是否存在匹配正则的字符串,不使用全局模式一样可以实现目的,所以第一种方法就是不适用全局模式。
第二种方法:不将正则对象实例存在变量中,每次直接用正则对象实例调用test方法,不过这种方法对内存有所损耗,理论上不建议。
以上是关于正则表达式test()方法是让它的参数字符串完全匹配么?还是部分匹配就能返回true啊!的主要内容,如果未能解决你的问题,请参考以下文章
test,exec,match,replace方法区别 正则