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

时间:2012-07-19 20:11:16

标签: 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

如果这是预期的行为,为什么会这样呢?如果这是预期的行为,我如何正确搜索没有正则表达式的String?

1 个答案:

答案 0 :(得分:3)

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

  

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

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

"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,它需要一个字符串参数,而不是一个正则表达式。