我不了解其他Javascript引擎,但在V8中,包括Chrome和Node.js,String.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?
答案 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
,它需要一个字符串参数,而不是一个正则表达式。