2008-12-09 18 views
142

जावास्क्रिप्ट के लिए बिल्कुल नया होने के नाते, मैं यह जानने में असमर्थ हूं कि इनमें से प्रत्येक का उपयोग कब किया जाए।जावास्क्रिप्ट में, indexOf() और खोज() के बीच क्या अंतर है?

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

उत्तर

163

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

+23

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

+6

इसके अलावा, 'खोज' एक स्ट्रिंग का मूल्यांकन करेगा, भले ही आप नहीं चाहते हैं। – cregox

+8

@ cregox की टिप्पणी महत्वपूर्ण है - "हैलो" आज़माएं। खोज ("।") '- यह 0 लौटाती है, न कि 5'।'किसी भी चरित्र " – JoeRocc

27

indexOf सादा सबस्ट्रिंग्स के लिए है, search नियमित अभिव्यक्ति कर सकते हैं।

7

मुझे लगता है कि मुख्य अंतर यह है कि खोज नियमित अभिव्यक्ति स्वीकार करती है।

चेक इस संदर्भ:

12

खोज समारोह (one description here) एक नियमित अभिव्यक्ति है, जो आपको और अधिक परिष्कृत patters, केस-संवेदी तार के खिलाफ मैच के लिए अनुमति देता है लेता है , आदि, जबकि indexOf (one description here) बस एक शाब्दिक स्ट्रिंग से मेल खाता है। हालांकि, indexOf आपको एक प्रारंभिक अनुक्रमणिका निर्दिष्ट करने की अनुमति देता है।

2

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

IndexOf

Search

+2

के लिए रेगेक्स टोकन है * एक * ऑफसेट लौटाता है। https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/search – rvighne

0

एक 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>

3

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

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

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

+0

यह "बच्चे/ई/लेफ्टेंट" के लिए क्या वापस आता है .indexOf (m); '? – RamenChef

+1

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

संबंधित मुद्दे