【问题标题】:Why does "a".search(".") return 0 in JavaScript?为什么 "a".search(".") 在 JavaScript 中返回 0?
【发布时间】:2020-12-11 10:19:54
【问题描述】:

为什么 "a".search(".") 在 JavaScript 中返回 0,即使 "".search(".") 返回 -1"."用在search()中是否有特殊含义?

【问题讨论】:

    标签: javascript string methods


    【解决方案1】:

    来自MDN

    search() 方法执行搜索正则表达式与此 String 对象之间的匹配项。

    如果传递了非正则表达式对象regexp,它会隐式转换为带有new RegExp(regexp) 的正则表达式。

    在这种情况下会发生这种情况,"." 被转换为 /./

    . 在 JavaScript 正则表达式中确实具有特殊含义:它匹配任何非换行符。 "a" 在位置 0 处有一个非换行符,"" 没有要匹配的非换行符。

    您可能一直在考虑String.prototype.indexOf,它会搜索字符串。

    console.log("a".indexOf("."));

    【讨论】:

    • Welp,我不知道“隐含”是什么意思,但我想我现在知道了。顺便说一句,search() 是唯一“隐式”将其参数转换为正则表达式的方法吗?还是我必须提防其他任何需要字符串的人?
    • @Vun-HughVaw:我认为这是唯一的一个。
    【解决方案2】:

    原因是.search() 以正则表达式为参数。如果您传递一个字符串,它会隐式转换为正则表达式。但是,当您谈论“.”时,将其更改为正则表达式时,它可以变成/./,但它必须是/\./。这就是为什么,您必须传递一个正则表达式来代替“.”的字符串。

    这样做: "a".search(/\./);

    【讨论】:

      【解决方案3】:

      search() 方法返回第一个匹配项的索引,如果没有找到匹配项,则返回 -1。

      console.log("asd".search("d")); // 2
      
      console.log("aasds.asdd".search(/\./)); // 5

      匹配点的正确语法是使用带有转义字符\.的正则表达式

      【讨论】:

        【解决方案4】:

        . 匹配除行终止符之外的任何字符。 因此,"a".search(".") 返回 0。

        0 索引处匹配a

        【讨论】:

          【解决方案5】:

          对于您的查询,.regex 表达式中具有特殊含义。 search() 在后面使用 regex。所以,你必须把escape 字符放在特殊字符之前,比如,

          console.log( "".search("\\.") );

          【讨论】:

            猜你喜欢
            • 2012-08-09
            • 2019-12-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-04-10
            • 2015-06-21
            • 2016-06-02
            相关资源
            最近更新 更多