JavaScript:String.search()无法搜索" []"或"()"

时间:2017-04-28 17:26:59

标签: javascript

如果您尝试搜索" []"等字符串。或" ()"使用search()功能,它不起作用。

function myFunction() {
    var str = "Visit []W3Schools!"; 
    var n = str.search("[]");
    document.getElementById("demo").innerHTML = n;
}

你可以尝试W3Schools - https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_search

搜索[]会返回-1,而搜索()会返回0。总是。

为什么?

4 个答案:

答案 0 :(得分:4)

String.search使用RegExp,并将其参数转换为1,如果它还没有。 Sequence[]是RegExp的特殊字符。

您可以直接创建正则表达式并转义字符,如下所示:

()

但是,如果您要搜索文字字符串,那么您应该使用String.indexOf代替。

var n = str.search(/\[\]/);

答案 1 :(得分:2)

这是因为搜索期待正则表达式。如果传递了字符串,则search将使用new RegExp将其显式转换为正则表达式。

将其称为str.search("[]")就像调用str.search(/[]/)一样(字符串中的任何内容都与空集匹配,因此返回-1)。

将其称为str.search("()")就像调用它str.search(/()/)一样(在索引""找到第一个空字符串0)。

我建议在MDN而不是W3Schools上查找文档。

答案 2 :(得分:1)

JavaScript搜索函数将正则表达式作为其参数:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/search

在正则表达式中,“[”和“(”是特殊字符。

尝试用以下方法替换您的功能:

function myFunction() {
    var str = "Visit []W3Schools!"; 
    var n = str.search("\\[]");
    document.getElementById("demo").innerHTML = n;
}

或更好:

var n = str.search(/\[]/);

'''特殊字符被转义。一旦转义,']'就不需要转义,因为只有在没有转义的'['。

之后才会对它进行特殊处理。

有关JavaScript中正则表达式的更多信息,请查看:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp

答案 3 :(得分:0)

因为搜索字符串是regular-expression而“[]”和“()”都是魔术。你需要双重逃脱它们:

str.search("\\[\\]")

甚至更好,正如ephemient所指出的那样:

str.indexOf("[]")