IndexOf () और search () में क्या अंतर है?


180

जावास्क्रिप्ट में काफी नया होने के कारण, मैं इनमें से प्रत्येक का उपयोग करने में असमर्थ हूं।

क्या कोई मेरे लिए इसे स्पष्ट करने में मदद कर सकता है?

जवाबों:


211

यदि आपको एक नियमित अभिव्यक्ति की आवश्यकता है, तो उपयोग करें search()। नहीं तो indexOf()और तेज होने वाला है।


32
इस दावे का समर्थन करने के लिए कोई संदर्भ?
रोबिस्रोब

16
इसके अलावा, searchअगर आप नहीं करना चाहते हैं, तो भी एक रेगेक्स में एक स्ट्रिंग का मूल्यांकन करेंगे।
क्रेगॉक्स

26
@ cregox की टिप्पणी महत्वपूर्ण है - कोशिश "hello.".search(".")- यह 0 देता है, 5 नहीं, क्योंकि ."किसी भी चरित्र" के लिए regex टोकन है


14

खोज फ़ंक्शन ( यहां एक विवरण ) एक नियमित अभिव्यक्ति लेता है, जो आपको अधिक परिष्कृत पेटेंट, केस-असंवेदनशील तारों आदि के खिलाफ मैच करने की अनुमति देता है, जबकि इंडेक्सऑफ ( यहां एक विवरण ) बस शाब्दिक स्ट्रिंग से मेल खाता है। हालाँकि, indexOf आपको एक आरंभिक सूचकांक निर्दिष्ट करने की भी अनुमति देता है।



4

IndexOf () - यह स्ट्रिंग शाब्दिक या स्ट्रिंग ऑब्जेक्ट को स्वीकार करता है लेकिन नियमित अभिव्यक्ति नहीं । यह अपनी खोज शुरू करने के लिए शून्य-आधारित पूर्णांक मान को भी स्वीकार करता है, जैसे:

  1. "Babyelephant" .indexOf ( "ई"); // आपको 4 देता है
  2. "Babyelephant" .indexOf ( "ई", 5); // आपको 6 देता है क्योंकि खोज 6 वें स्थान या 5 वें सूचकांक से शुरू होती है।
  3. var m = / e /; "Babyelephant" .indexOf (एम); // देता है -1 क्योंकि यह नियमित अभिव्यक्ति को स्वीकार नहीं करता है।

खोज () - दोनों स्ट्रिंग शाब्दिक या स्ट्रिंग ऑब्जेक्ट और नियमित अभिव्यक्ति को स्वीकार करता है। लेकिन यह खोज शुरू करने के लिए एक सूचकांक को स्वीकार नहीं करता है।


यह किस लिए लौटता है "baby/e/lephant".indexOf(m);?
RamenChef

1
अच्छा एक .. यह वापस आ जाएगा। 4. कैश / ई / स्ट्रिंग मौजूद है..लेकिन अगर आप एक रेगेक्स "ई" खोजना चाहते हैं तो आप वांछित परिणाम प्राप्त नहीं करने वाले हैं। UMM शायद मुझे अपने उत्तर को indexOf में संशोधित करना चाहिए () एक स्ट्रिंग स्ट्रिंग के रूप में रेगेक्स को खोजने की कोशिश करता है न कि एक रेक्स के रूप में।
15

4

indexOf () और खोज ()

  • दोनों में आम है

    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)

संदर्भ


2

खोज पाता है कि यह एक नियमित अभिव्यक्ति के साथ मेल खाता है, लेकिन इसका कोई ऑफ़सेट नहीं है। IndexOf से मिलान करने के लिए शाब्दिक का उपयोग करता है, लेकिन एक ऑफसेट है।

के सूचकांक

खोज


2
खोजें करता है एक ऑफसेट लौट आते हैं। developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
rvighne

-1

रेगेक्स के बिना , इंडेक्सऑफ और खोज के बीच कोई व्यावहारिक अंतर नहीं है ।

नीचे दिया गया उदाहरण एक लाइव डेमो देता है :

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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.