indexOf()とsearch()の違いは何ですか?


180

JavaScriptはかなり新しいので、これらのそれぞれをいつ使用するかわかりません。

誰かがこれを明確にするのを手伝ってくれる?

回答:


211

正規表現が必要な場合は、を使用してくださいsearch()。そうでなければ、indexOf()より速くなります。


32
この主張を支持する参照はありますか?
robisrob 2016年

16
また、search必要がない場合でも、文字列を正規表現に評価します。
cregox

26
@cregoxのコメントは重要です-試してください"hello.".search(".")- .「任意の文字」の正規表現トークンであるため、5ではなく0を返します


14

検索関数(ここに1つの説明)は正規表現を使用します。これにより、より洗練されたパターン、大文字と小文字を区別しない文字列などと照合できます。一方、indexOf(ここに1つの説明)はリテラル文字列にのみ一致します。ただし、indexOfでは開始インデックスを指定することもできます。


7

主な違いは、検索が正規表現を受け入れることです。

このリファレンスを確認してください:


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 2016

1
良いもの.. / e /文字列が存在するため、4 ..が返されます。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)2番目の引数として検索開始位置を指定できます

    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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.