繁体   English   中英

为什么“a”.search(“.”) 在 JavaScript 中返回 0?

[英]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。

匹配0a索引。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM