search方法返回第一个匹配项的起始索引(0起),未找到返回-1;仅支持正则表达式,忽略g/y标志;不返回匹配内容,只返回位置。

search 方法会返回字符串中**第一个匹配项的起始索引位置**(从 0 开始),如果没找到匹配,则返回 -1。它只接受正则表达式(不支持字符串),且**不支持全局标志 g** —— 即使写了 /pattern/g,search 也只找第一个匹配并忽略 g。
基本用法和返回值含义
它和 indexOf 类似,但支持正则的灵活匹配(如忽略大小写、字符类、量词等):
-
"Hello World".search(/o/)→ 返回4(第一个o在索引 4) -
"Hello World".search(/l+/)→ 返回2("ll"从索引 2 开始) -
"Hello World".search(/xyz/)→ 返回-1(未匹配) -
"Apple".search(/p/i)→ 返回1(i标志生效,忽略大小写)
注意:不支持 g 和 y 标志
即使正则带 g(全局)或 y(粘性),search 也只匹配一次,且始终返回第一个匹配位置:
-
"a a a".search(/a/g)→ 还是返回0,不是2或4 - 想获取所有匹配位置?得用
RegExp.prototype.exec配合循环,或matchAll
与 match 和 exec 的关键区别
search 只关心“在哪”,不关心“匹配了什么”:
- 返回数值(索引或 -1),不返回匹配结果数组
- 不修改正则的
lastIndex,不可用于连续查找 - 而
match(/.../g)返回匹配字符串数组;exec返回详细结果对象(含index属性)
实用小技巧
快速判断是否存在匹配 + 获取位置,一行搞定:
const pos = str.search(/\d+/); if (pos !== -1) { console.log("数字从", pos, "开始"); }- 配合三元运算:
const idx = text.search(/error/i) >= 0 ? "有错误" : "正常"; - 注意:空字符串
""对任意非空字符串调用search(/./)会返回0(因为.匹配第一个字符)
不复杂但容易忽略:它只认正则,不接受字符串;只认第一个,无视全局;返回的是位置,不是结果。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











