为什么 string.search 的参数表现得像一个正则表达式?

ske*_*gse 5 javascript string search

我不知道其他 Javascript 引擎,但在 V8 中,包括 Chrome 和Node.jsString.prototype.search以一种意想不到的方式运行。

> "054".search("0.4")
0 // expected -1
> "Sample String 007".search("0.7")
14 // expected -1
> "Sample String 0.7".search("0.7")
14 // expected behavior
Run Code Online (Sandbox Code Playgroud)

如果这是预期的行为,为什么会这样?如果这是预期的行为,我如何在没有正则表达式的情况下正确搜索字符串?

aps*_*ers 5

MDN 上String.search的页面有关于函数参数的说明:

如果传递了非 RegExp 对象 obj,则使用 将其隐式转换为 RegExp new RegExp(obj)

因此,示例中的字符串被正确强制转换为正则表达式对象。您的测试相当于:

"054".search(new RegExp("0.4"))
"Sample String 007".search(new RegExp("0.7"))
"Sample String 0.7".search(new RegExp("0.7"))
Run Code Online (Sandbox Code Playgroud)

他们返回正确的结果。

正如@meetamit 在您的第二个问题中指出的那样,您实际上想要indexOf,它需要一个字符串参数,而不是正则表达式。

  • 对。而要在没有 RegExp 的情况下进行搜索,只需使用 indexOf 方法。`"一些字符串".indexOf("whatever");` (5认同)