如果您尝试搜索" []
"等字符串。或" ()
"使用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
。总是。
为什么?
答案 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("[]")