indexOf()和search()有什么区别?


Answers:


211

如果需要正则表达式,请使用search()。否则,indexOf()将会更快。


31
有任何证据支持这项主张吗?
robisrob

16
此外,search即使您不愿意,也可以将字符串评估为正则表达式。
cregox

26
@cregox的注释很重要-试试"hello.".search(".")-它返回0,而不是5,因为它.是“任何字符”的正则表达式令牌


14

搜索功能(此处为一个描述)采用正则表达式,它使您可以与更复杂的模式,不区分大小写的字符串等进行匹配,而indexOf(此处为一个描述)仅与文字字符串匹配。但是,indexOf也允许您指定起始索引。



4

IndexOf()-它接受字符串文字或字符串对象,但接受正则表达式。它还接受一个从零开始的整数值,以从以下位置开始搜索:

  1. “ babyelephant” .indexOf(“ e”); //给你4
  2. “ babyelephant” .indexOf(“ e”,5); //从第6个位置或第5个索引开始搜索,结果为6。
  3. var m = / e /; “ babyelephant” .indexOf(m); //给出-1,因为它不接受正则表达式。

Search()-接受字符串文字或字符串对象以及正则表达式。但是它不接受索引来开始搜索。


它返回"baby/e/lephant".indexOf(m);什么?
RamenChef

1
一个好..它将返回4 ..因为存在/ e /字符串..但是如果您想找到一个正则表达式“ e”,则不会得到期望的结果。UMM也许我应该修改对indexOf()的回答,尝试将正则表达式作为字符串文字而不是正则表达式来查找。
bablue 2016年

4

indexOf()和search()

  • 两者共同

    i)返回第一次出现的搜索值

    ii)如果找不到匹配项,则返回-1

    let str='Book is booked for delivery'
    str.indexOf('b')   // returns position 8
    str.search('b')    // returns position 8 

  • indexOf()中的特殊

    i)您可以将起始搜索位置作为第二个参数

    str.indexOf('k')   // 3
    str.indexOf('k',4) // 11 (it start search from 4th position) 

  • search()特别

搜索值可以是正则表达式

str.search('book') // 8
str.search(/book/i)  // 0   ( /i =case-insensitive   (Book == book)

参考



-1

没有正则表达式indexOfsearch之间没有实际区别。

以下示例提供了一个实时演示

function FromSearch() {

  var str = document.getElementById("demo").innerText;
  var n = str.search("difference");
  document.getElementById("Location").innerHTML = n;
}

function FromindexOf() {
  var str = document.getElementById("demo").innerText;
  var n = str.indexOf("difference");
  document.getElementById("Location").innerHTML = n;
}
<p id="demo">Without a <a href='http://www.w3schools.com/js/js_regexp.asp'>regex</a>, there is no practical difference between <a href='http://www.w3schools.com/jsref/jsref_indexof.asp'>indexOf</a> and <a href='http://www.w3schools.com/jsref/jsref_search.asp'>search</a>
</p>

<button onclick="FromSearch()">From search</button>

<button onclick="FromindexOf()">From indexOf</button>

<p>Location of difference in the above sentence is:</p>

<mark id="Location"></mark>


1
有一个显着的区别:search将字符串转换为RegExp,例如,str.search("d........e");也将与字符39匹配
。– 1j01
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.