indexOf() 和 search() 有啥区别?

Posted

技术标签:

【中文标题】indexOf() 和 search() 有啥区别?【英文标题】:What is the difference between indexOf() and search()?indexOf() 和 search() 有什么区别? 【发布时间】:2010-09-26 03:06:09 【问题描述】:

对于 javascript 来说还是个新手,我无法辨别何时使用其中的每一个。

谁能帮我澄清一下?

【问题讨论】:

【参考方案1】:

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

【讨论】:

有任何引用来支持这一说法吗? 此外,search 会将字符串评估为正则表达式,即使您不想这样做。 @cregox 的评论很重要 - 试试 "hello.".search(".") - 它返回 0,而不是 5,因为 . 是“任何字符”的正则表达式标记 'hello'.indexOf(undefined) 返回 -1,'hello'.search(undefined) 返回 0【参考方案2】:

indexOf 用于普通子字符串,search 用于正则表达式。

【讨论】:

【参考方案3】:

搜索函数 (one description here) 采用正则表达式,允许您匹配更复杂的模式、不区分大小写的字符串等,而 indexOf (one description here) 仅匹配文字字符串。但是,indexOf 也允许您指定起始索引。

【讨论】:

【参考方案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) 

搜索中的特殊()

搜索值可以是正则表达式

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

reference

【讨论】:

【参考方案5】:

我认为主要区别在于搜索接受正则表达式。

检查此参考:

search indexOf

【讨论】:

【参考方案6】:

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

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

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

【讨论】:

"baby/e/lephant".indexOf(m); 返回什么? 好一个..它会返回 4..因为 /e/ 字符串存在..但是如果你想找到一个正则表达式“e”你不会得到想要的结果。 UMM 也许我应该修改我对 indexOf() 的回答尝试将正则表达式作为字符串文字而不是作为正则表达式来查找。【参考方案7】:

搜索发现它与正则表达式匹配,但没有偏移量。 IndexOf 使用文字进行匹配,但有一个偏移量。

IndexOf

Search

【讨论】:

搜索确实返回一个偏移量。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…【参考方案8】:

没有regex,indexOf 和search 之间没有实际区别。

下面的例子给出了一个实时的demo:

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>

【讨论】:

有一个显着的区别:search 将字符串转换为RegExp,例如str.search("d........e"); 也会匹配到第 39 个字符。

以上是关于indexOf() 和 search() 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Js中 字符串函数indexOf与search的区别

js中字符串函数indexOf与search的区别

BOSS 和 Yahoo Web Search API 有啥区别?

viewableID 和 guid 有啥区别?

JavaScript

JavaScript