[英]Why does “a”.search(“.”) return 0 in JavaScript?
为什么"a".search(".")
在 JavaScript 中返回0
,即使"".search(".")
返回-1
? 做"."
在search()
中使用时有特殊含义吗?
来自MDN :
search()
方法执行搜索正则表达式和此String
object 之间的匹配项。⋮
如果传递了非正则表达式 object 正则
regexp
,它会隐式转换为带有new RegExp(regexp)
的正则表达式。
在这种情况下会发生这种情况,并且"."
被转换为/./
。
.
在 JavaScript 正则表达式中确实具有特殊含义:它匹配任何非换行符。 "a"
在 position 0 处有一个非换行符,而""
没有要匹配的非换行符。
您可能一直在考虑String.prototype.indexOf
,它搜索字符串。
console.log("a".indexOf("."));
原因是.search()
将正则表达式作为参数。 如果您传递一个字符串,它会隐式转换为正则表达式。 但是,当您谈论“.”时,将其更改为正则表达式时,它可以变成/./
但它必须是/\./
。 这就是为什么,您必须传递一个正则表达式来代替“.”的字符串。
这样做: "a".search(/\./);
search() 方法返回第一个匹配项的索引,如果没有找到匹配项,则返回 -1。
console.log("asd".search("d")); // 2 console.log("aasds.asdd".search(/\./)); // 5
匹配点的正确语法是使用带有转义字符\.
.
匹配除行终止符之外的任何字符。 因此, "a".search(".")
返回 0。
匹配0
处a
索引。
对于您的查询, .
在regex
表达式中具有特殊含义。 search()
在后面使用regex
。 所以,你必须把escape
字符放在特殊字符之前,比如,
console.log( "".search("\\.") );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.