【问题标题】:Why does the argument to string.search behave like a Regex?为什么 string.search 的参数表现得像正则表达式?
【发布时间】:2012-07-19 02:11:10
【问题描述】:

我不知道其他 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

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

【问题讨论】:

    标签: javascript string search


    【解决方案1】:

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

    如果传递了非正则表达式对象 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,它需要一个字符串参数,而不是正则表达式。

    【讨论】:

    • 对。而要在没有 RegExp 的情况下进行搜索,只需使用 indexOf 方法。 "some string".indexOf("whatever");
    • 正是我想知道的。了解太多语言并且不记得确切适用哪个功能的常见问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 2018-06-28
    • 1970-01-01
    相关资源
    最近更新 更多