正则表达式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方法区别 正则

JS正则表达式(转载)

正则-简单的模式

lastIndex对正则结果的影响

JS中正则匹配的三个方法match exec test的用法

正则表达式的基础问题