RegExp.prototype.test()
test()
方法是 RegExp
实例的方法,它使用此正则表达式执行搜索,以查找正则表达式和指定字符串之间的匹配项。如果存在匹配项,则返回 true
;否则返回 false
。
当 JavaScript RegExp
对象设置了 global
或 sticky
标志(例如,/foo/g
或 /foo/y
)时,它们就是有状态的。它们存储来自先前匹配的 lastIndex
。在内部使用此属性,test()
可用于迭代文本字符串中的多个匹配项(以及捕获组)。
试一试
语法
test(str)
参数
返回值
如果正则表达式和字符串 str
之间存在匹配项,则返回 true
。否则返回 false
。
描述
当你想知道字符串中是否找到了某个模式时,请使用 test()
。与 String.prototype.search()
方法(如果未找到则返回匹配项的索引或 -1
)不同,test()
返回一个布尔值。
要获取更多信息(但执行速度较慢),请使用 exec()
方法。(这类似于 String.prototype.match()
方法。)
与 exec()
一样(或与之结合使用),对同一全局正则表达式实例多次调用 test()
将会跳过先前的匹配项。
示例
使用 test()
一个简单的示例,测试字符串开头是否包含 "hello"
,并返回布尔结果。
const str = "hello world!";
const result = /^hello/.test(str);
console.log(result); // true
以下示例根据测试结果记录一条消息
function testInput(re, str) {
const midstring = re.test(str) ? "contains" : "does not contain";
console.log(`${str} ${midstring} ${re.source}`);
}
在带有“global”标志的正则表达式上使用 test()
当正则表达式设置了 全局标志 时,test()
将会推进正则表达式的 lastIndex
。(RegExp.prototype.exec()
也会推进 lastIndex
属性。)
对 test(str)
的后续调用将从 lastIndex
开始继续搜索 str
。每次 test()
返回 true
时,lastIndex
属性都会继续增加。
注意:只要 test()
返回 true
,lastIndex
就不会重置,即使是在测试不同的字符串时!
当 test()
返回 false
时,调用正则表达式的 lastIndex
属性将重置为 0
。
以下示例演示了此行为
const regex = /foo/g; // the "global" flag is set
// regex.lastIndex is at 0
regex.test("foo"); // true
// regex.lastIndex is now at 3
regex.test("foo"); // false
// regex.lastIndex is at 0
regex.test("barfoo"); // true
// regex.lastIndex is at 6
regex.test("foobar"); // false
// regex.lastIndex is at 0
regex.test("foobarfoo"); // true
// regex.lastIndex is at 3
regex.test("foobarfoo"); // true
// regex.lastIndex is at 9
regex.test("foobarfoo"); // false
// regex.lastIndex is at 0
// (...and so on)
规范
规范 |
---|
ECMAScript 语言规范 # sec-regexp.prototype.test |
浏览器兼容性
BCD 表格仅在启用了 JavaScript 的浏览器中加载。