String.prototype.search()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

search() 方法用于在 String 对象中执行正则表达式的搜索,寻找匹配项。

尝试一下

const paragraph = "I think Ruth's dog is cuter than your dog!";

// Anything not a word character, whitespace or apostrophe
const regex = /[^\w\s']/g;

console.log(paragraph.search(regex));
// Expected output: 41

console.log(paragraph[paragraph.search(regex)]);
// Expected output: "!"

语法

js
search(regexp)

参数

regexp

一个正则表达式对象,或者具有 Symbol.search 方法的任意对象。

如果 regexp 不是 RegExp 对象,并且不具有 Symbol.search 方法,则会使用 new RegExp(regexp) 将其隐式转换为 RegExp

返回值

如果匹配成功,则返回正则表达式在字符串中首次匹配的索引;否则,返回 -1

描述

String.prototype.search() 方法的实现非常简单——它只是将该字符串作为调用实参拥有的 Symbol.search 方法的第一个参数。实际的实现来自于 RegExp.prototype[Symbol.search]()

regexpg 标志对 search() 方法的结果没有影响,搜索总是以正则表达式的 lastIndex 为 0 进行。有关 search() 方法行为的更多信息,请参阅 RegExp.prototype[Symbol.search]()

当你想知道字符串中是否存在某个模式,并且想知道它在字符串中的索引时,可以使用 search() 方法。

示例

下面的示例中用两个不同的正则表达式对同一个字符串执行搜索匹配,得到一个成功匹配(正数返回值)和一个失败匹配(-1)。

js
const str = "hey JudE";
const re = /[A-Z]/;
const reDot = /[.]/;
console.log(str.search(re)); // 返回 4,这是第一个大写字母“J”的索引
console.log(str.search(reDot)); // 返回 -1,找不到点符号“.”

规范

Specification
ECMAScript® 2025 Language Specification
# sec-string.prototype.search

浏览器兼容性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
search

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

参见