search() 方法返回第一个匹配项的起始索引(找到时为非负整数,未找到为-1),支持字符串和正则表达式(忽略g标志,i标志有效),不修改原字符串,也不接受起始位置或替换参数。
search() 方法在字符串中查找指定的子字符串或正则表达式,返回第一个匹配项的起始索引位置;未找到时返回 -1。
返回值是索引位置,不是布尔值
不同于 includes() 或正则的 test(),search() 不返回 true 或 false,而是返回数字:
- 找到匹配:返回从
0开始的整数索引(例如"hello".search("e")返回1) - 未找到匹配:统一返回
-1(例如"hello".search("z")返回-1) - 空字符串作为参数:始终返回
0(因为空字符串在任意位置都“匹配”,默认取开头)
支持正则表达式,但忽略 g 标志
传入正则时,search() 只关心第一个匹配,即使正则带 g(全局)标志也只返回首个位置:
-
"aabbcc".search(/b/g)→2(不是3,也不报错) - 不支持
y(粘性)或u(Unicode)以外的标志影响行为,但i(忽略大小写)有效 - 如果正则有捕获组或修饰符,不影响返回值类型,只影响匹配逻辑
不修改原字符串,也不接受替换参数
search() 是纯查询方法:
- 它不会改变调用它的字符串(字符串在 JS 中本就是不可变的)
- 不能像
replace()那样传入替换内容,也不能指定起始搜索位置(不像indexOf()的第二个参数) - 若需从某位置开始搜,可先用
slice()截取子串再调用search(),但返回的索引是相对于原字符串的
与 indexOf() 的关键区别
两者都返回索引或 -1,但行为不同:
立即学习“Java免费学习笔记(深入)”;
-
indexOf()只支持字符串参数,不支持正则 -
search()只支持字符串或正则,不支持起始位置偏移 - 正则能力是
search()的核心优势:支持字符类、量词、标志等灵活匹配 - 对非字符串参数,两者都会隐式转为字符串(如
123变成"123")


















