RegExp.prototype.test()

基线 广泛可用

此功能已得到良好建立,并且可在许多设备和浏览器版本上运行。它自以下时间起在浏览器中可用 2015 年 7 月.

test() 方法是 RegExp 实例的方法,它使用此正则表达式执行搜索,以查找正则表达式和指定字符串之间的匹配项。如果存在匹配项,则返回 true;否则返回 false

当 JavaScript RegExp 对象设置了 globalsticky 标志(例如,/foo/g/foo/y)时,它们就是有状态的。它们存储来自先前匹配的 lastIndex。在内部使用此属性,test() 可用于迭代文本字符串中的多个匹配项(以及捕获组)。

试一试

语法

js
test(str)

参数

str

要针对其匹配正则表达式的字符串。所有值都将强制转换为字符串,因此省略它或传递 undefined 会导致 test() 搜索字符串 "undefined",这很少是你想要的。

返回值

如果正则表达式和字符串 str 之间存在匹配项,则返回 true。否则返回 false

描述

当你想知道字符串中是否找到了某个模式时,请使用 test()。与 String.prototype.search() 方法(如果未找到则返回匹配项的索引或 -1)不同,test() 返回一个布尔值。

要获取更多信息(但执行速度较慢),请使用 exec() 方法。(这类似于 String.prototype.match() 方法。)

exec() 一样(或与之结合使用),对同一全局正则表达式实例多次调用 test() 将会跳过先前的匹配项。

示例

使用 test()

一个简单的示例,测试字符串开头是否包含 "hello",并返回布尔结果。

js
const str = "hello world!";
const result = /^hello/.test(str);

console.log(result); // true

以下示例根据测试结果记录一条消息

js
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() 返回 truelastIndex 就不会重置,即使是在测试不同的字符串时!

test() 返回 false 时,调用正则表达式的 lastIndex 属性将重置为 0

以下示例演示了此行为

js
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 的浏览器中加载。

另请参阅