5

我不了解其他 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

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

4

1 回答 1

5

MDN 在String.search上的页面对函数的参数有这样的说法:

如果传递了一个非正则表达式对象 obj,它会通过使用隐式转换为正则表达式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"))

他们返回正确的结果。

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

于 2012-07-19T20:15:10.713 回答