दिलचस्प पोस्ट
वेबवेव onreceivedSslError के क्रियान्वयन पर Google Play से सुरक्षा अलर्ट से बचें सामग्री जोड़ने से पहले requestFeature () को बुलाया जाना चाहिए SimpleDateFormat का उपयोग करने के लिए स्ट्रिंग को एक तिथि में कनवर्ट कैसे करें? जावा में एक अर्रे सूची को सॉर्ट करने के लिए कोई इनपुट फ़ाइल निर्दिष्ट नहीं की गई एचटीटीपी बनाम एचटीटीपीएस प्रदर्शन CS0120: गैर-विशिष्ट क्षेत्र, विधि, या प्रॉपर्टी 'फू' के लिए ऑब्जेक्ट संदर्भ की आवश्यकता है पीडीएफ के लिए एचटीएमएल आईटीक्शशशिप? पारदर्शी पृष्ठभूमि के साथ एक ओपनजीएल रेंडरिंग प्रसंग कैसे करें? गतिशील सामग्री को लोड करने के लिए Phantomjs के साथ कैसे स्क्रॉल करें कैसे MVC में एक डिफ़ॉल्ट रूट (एक क्षेत्र में) सेट करने के लिए त्रुटि: कार्य निष्पादन के लिए विफल ': app: dexDebug' com.android.ide.common.process.ProcessException क्या सीएसएस में एक onclick प्रभाव हो सकता है? रनटाइम पर निर्धारित किया गया upload_to के साथ Django FileField सेट का उपयोग किए बिना सरणी से डुप्लिकेट को कुशलता से कैसे निकालें

समाप्त होता है जावास्क्रिप्ट में

मैं कैसे जांच सकता हूं कि स्ट्रिंग जावास्क्रिप्ट में एक विशेष वर्ण के साथ समाप्त हो जाती है?

उदाहरण: मेरे पास स्ट्रिंग है

var str = "mystring#"; 

मुझे यह जानना है कि यदि स्ट्रिंग # साथ समाप्त हो रहा है मैं इसे कैसे देख सकता हूं?

  1. क्या जावास्क्रिप्ट में एक endsWith() विधि?

  2. मेरे पास एक समाधान स्ट्रिंग की लंबाई लेते हैं और अंतिम चरित्र प्राप्त करते हैं और इसे जांचते हैं।

क्या यह सबसे अच्छा तरीका है या कोई अन्य तरीका है?

वेब के समाधान से एकत्रित समाधान "समाप्त होता है जावास्क्रिप्ट में"

अपडेट (24 नवंबर, 2015):

यह उत्तर मूल रूप से वर्ष 2010 (छह साल पहले) में पोस्ट किया गया है, इसलिए कृपया इन व्यावहारिक टिप्पणियों का ध्यान रखें:

  • Shauna – Googlers के लिए अपडेट – ऐसा लगता है कि ECMA6 इस फ़ंक्शन को जोड़ता है। एमडीएन लेख भी एक polyfill दिखाता है https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith

  • टी जे क्रॉडर – सब्सट्रिंग बनाना आधुनिक ब्राउज़रों पर महंगा नहीं है; यह 2010 में हो सकता है जब यह उत्तर पोस्ट किया गया था। इन दिनों, सरल this.substr(-suffix.length) === suffix दृष्टिकोण क्रोम पर सबसे तेज़ है, IE11 पर अनुक्रमणिकाऑफ़ के रूप में, और फ़ायरफ़ॉक्स पर केवल 4% धीमी (फेरेगाबॉटिट क्षेत्र): jsperf.com/endswith-stackoverflow / 14 और बोर्ड के पार तेजी से जब परिणाम झूठा है: jsperf.com/endswith-stackoverflow-when-false बेशक, ES6 के साथ जोड़ समाप्त होता है, बिंदु विवादास्पद है। 🙂


मूल उत्तर:

मुझे पता है कि यह एक साल का सवाल है … लेकिन मुझे इसकी भी ज़रूरत है और मुझे क्रॉस-ब्राउज़र काम करने की आवश्यकता है … ताकि सभी के जवाब और टिप्पणियों को जोड़कर और थोड़ा सा सरल बना सकें।

 String.prototype.endsWith = function(suffix) { return this.indexOf(suffix, this.length - suffix.length) !== -1; }; 
  • कोई सबस्ट्रिंग नहीं बनाते
  • सबसे तेज़ परिणामों के लिए मूल indexOf उपयोग करता है
  • आगे छोड़ने के लिए indexOf के दूसरे पैरामीटर का उपयोग करके अनावश्यक तुलना छोड़ें
  • इंटरनेट एक्सप्लोरर में काम करता है
  • कोई Regex जटिलताओं

इसके अलावा, यदि आपको मूल डेटा संरचना के प्रोटोटाइप में चीजें भरना पसंद नहीं है, तो यहां एक स्वसंपूर्ण संस्करण है:

 function endsWith(str, suffix) { return str.indexOf(suffix, str.length - suffix.length) !== -1; } 

संपादित करें: जैसा कि टिप्पणियों में @ शहिश द्वारा नोट किया गया है, यदि आप सुरक्षित पक्ष पर गलती करना चाहते हैं और जांच लें कि कोई क्रियान्वयन पहले से ही प्रदान किया गया है, तो आप इस typeof जांच के typeof जोड़ सकते हैं:

 if (typeof String.prototype.endsWith !== 'function') { String.prototype.endsWith = function(suffix) { return this.indexOf(suffix, this.length - suffix.length) !== -1; }; } 
 /#$/.test(str) 

सभी ब्राउज़रों पर काम करेगा, String बंदर पट्टी की आवश्यकता नहीं है, और अंतिम स्ट्रिंग को अंतिम रूप में स्कैनिंग की आवश्यकता नहीं होती है जब कोई मैच नहीं होता है।

यदि आप निरंतर स्ट्रिंग से मिलान करना चाहते हैं जिसमें नियमित अभिव्यक्ति विशेष वर्ण, जैसे '$' हो सकते हैं, तो आप निम्न का उपयोग कर सकते हैं:

 function makeSuffixRegExp(suffix, caseInsensitive) { return new RegExp( String(suffix).replace(/[$%()*+.?\[\\\]{|}]/g, "\\$&") + "$", caseInsensitive ? "i" : ""); } 

और फिर आप इसे इस तरह उपयोग कर सकते हैं

 makeSuffixRegExp("a[complicated]*suffix*").test(str) 
  1. दुर्भाग्य से नहीं।
  2. if( "mystring#".substr(-1) === "#" ) {}

चलो, यह सही endsWith कार्यान्वयन के साथ:

 String.prototype.endsWith = function (s) { return this.length >= s.length && this.substr(this.length - s.length) == s; } 

lastIndexOf का इस्तेमाल करते हुए सिर्फ अनावश्यक सीपीयू लूप बनाते हैं यदि कोई मैच नहीं है

यह संस्करण एक सबस्ट्रिंग बनाने से बचा जाता है, और नियमित अभिव्यक्ति का उपयोग नहीं करता है (यहां कुछ regex उत्तर काम करेगा; अन्य टूटा हुआ है):

 String.prototype.endsWith = function(str) { var lastIndex = this.lastIndexOf(str); return (lastIndex !== -1) && (lastIndex + str.length === this.length); } 

यदि प्रदर्शन आपके लिए महत्वपूर्ण है, तो यह मूल्य का परीक्षण होगा कि क्या अंतिम lastIndexOf एक सबस्ट्रिंग बनाने से वास्तव में तेज़ है या नहीं (यह अच्छी तरह से जे एस इंजन पर निर्भर करता है जिसका उपयोग आप कर रहे हैं …) यह मिलान के मामले में तेजी से हो सकता है, और जब स्ट्रिंग छोटा है – लेकिन जब स्ट्रिंग बहुत बड़ी होती है, तो उसे पूरी चीज़ के पीछे भी देखने की जरूरत होती है हालांकि हमें वास्तव में परवाह नहीं है 🙁

एक एकल वर्ण की जाँच करने के लिए, लंबाई खोजना और फिर charAt का उपयोग करना संभवतः सबसे अच्छा तरीका है

slice विधि के साथ ऐपराच नहीं देखा था इसलिए मैं इसे यहां छोड़ देता हूं:

 function endsWith(str, suffix) { return str.slice(-suffix.length) === suffix } 
 return this.lastIndexOf(str) + str.length == this.length; 

उस केस में काम नहीं करता है जहां मूल स्ट्रिंग लंबाई खोज स्ट्रिंग की लंबाई से कम है और खोज स्ट्रिंग नहीं मिली है:

पिछला इंडेक्स -1 देता है, तो आप खोज स्ट्रिंग लंबाई जोड़ते हैं और आप मूल स्ट्रिंग की लंबाई के साथ छोड़ देते हैं।

एक संभव तय है

 return this.length >= str.length && this.lastIndexOf(str) + str.length == this.length 

डेवलपर से। Mozilla.org String.prototype.endsWith ()

सारांश

समाप्त होता है endsWith() विधि यह निर्धारित करती है कि स्ट्रिंग किसी अन्य स्ट्रिंग के वर्णों के साथ समाप्त होती है, यथार्थ रूप से सही या गलत लौट रही है।

वाक्य – विन्यास

 str.endsWith(searchString [, position]); 

पैरामीटर

  • searchString : इस स्ट्रिंग के अंत में खोजे जाने वाले अक्षर।

  • स्थिति : इस स्ट्रिंग में खोजें जैसे कि यह स्ट्रिंग केवल यह लंबा था; इस स्ट्रिंग की वास्तविक लंबाई के लिए डिफ़ॉल्ट, इस स्ट्रिंग की लंबाई द्वारा स्थापित सीमा के भीतर दबड़ा हुआ है।

विवरण

यह विधि आपको यह निर्धारित करने में मदद करती है कि स्ट्रिंग किसी अन्य स्ट्रिंग के साथ समाप्त होती है या नहीं।

उदाहरण

 var str = "To be, or not to be, that is the question."; alert( str.endsWith("question.") ); // true alert( str.endsWith("to be") ); // false alert( str.endsWith("to be", 19) ); // true 

विशेष विवरण

ईसीएमएस्क्रिप्ट भाषा विशिष्टता 6 वां संस्करण (ईसीएमए -262)

ब्राउज़र संगतता

ब्राउज़र संगतता

 String.prototype.endsWith = function(str) {return (this.match(str+"$")==str)} String.prototype.startsWith = function(str) {return (this.match("^"+str)==str)} 

आशा है कि ये आपकी मदद करेगा

 var myStr = “ Earth is a beautiful planet ”; var myStr2 = myStr.trim(); //==“Earth is a beautiful planet”; if (myStr2.startsWith(“Earth”)) // returns TRUE if (myStr2.endsWith(“planet”)) // returns TRUE if (myStr.startsWith(“Earth”)) // returns FALSE due to the leading spaces… if (myStr.endsWith(“planet”)) // returns FALSE due to trailing spaces… 

पारंपरिक तरीके

 function strStartsWith(str, prefix) { return str.indexOf(prefix) === 0; } function strEndsWith(str, suffix) { return str.match(suffix+"$")==suffix; } 
 if( ("mystring#").substr(-1,1) == '#' ) 

– या –

 if( ("mystring#").match(/#$/) ) 

मैं तुम्हारे बारे में नहीं जानता, लेकिन:

 var s = "mystring#"; s.length >= 1 && s[s.length - 1] == '#'; // will do the thing! 

क्यों नियमित अभिव्यक्ति? प्रोटोटाइप के साथ क्यों गड़बड़? substr? चलो …

मैं बस इस स्ट्रिंग पुस्तकालय के बारे में सीखा है:

http://stringjs.com/

जेएस फ़ाइल शामिल करें और फिर इस तरह S चर का उपयोग करें:

 S('hi there').endsWith('hi there') 

इसे नोडजेएस में भी इंस्टॉल किया जा सकता है:

 npm install string 

फिर इसे S चर की आवश्यकता होती है:

 var S = require('string'); 

वेब पेज में वैकल्पिक स्ट्रिंग लायब्रेरी के लिंक भी हैं, अगर यह आपकी फैंसी नहीं लेता है।

यदि आप रद्दी का उपयोग कर रहे हैं:

 _.endsWith('abc', 'c'); // true 

यदि रद्दी का उपयोग न करें तो आप इसके स्रोत से उधार ले सकते हैं

 function strEndsWith(str,suffix) { var reguex= new RegExp(suffix+'$'); if (str.match(reguex)!=null) return true; return false; } 

इतनी छोटी सी समस्या के लिए बहुत सी बातें, बस इस नियमित अभिव्यक्ति का उपयोग करें

 var str = "mystring#"; var regex = /^.*#$/ if (regex.test(str)){ //if it has a trailing '#' } 

इस सवाल के लिए कई वर्षों से यह रहा है मैं उन उपयोगकर्ताओं के लिए एक महत्वपूर्ण अपडेट जोड़ूंगा जो सबसे ज्यादा वोट वाले चाकर का जवाब इस्तेमाल करना चाहते हैं।

ईसीएमएस्क्रिप्ट 6 (प्रायोगिक तकनीक) के भाग के रूप में 'समाप्त' कार्य पहले से जावास्क्रिप्ट में जोड़ा गया है

इसे यहां देखें: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith

इसलिए उत्तर में उल्लिखित मूल कार्यान्वयन के अस्तित्व की जांच करने के लिए अत्यधिक सिफारिश की जाती है।

सिर्फ एक और त्वरित विकल्प जो मेरे लिए आकर्षण का काम करता है, regex का उपयोग कर:

 // Would be equivalent to: // "Hello World!".endsWith("World!") "Hello World!".match("World!$") != null 

भविष्य के प्रमाण के लिए एक रास्ता और / या मौजूदा प्रोटोटाइप को ओवरराइट करने से रोकने के लिए जांच जांच होगी कि क्या यह स्ट्रिंग प्रोटोटाइप में पहले से जोड़ दिया गया है। यहां पर गैर-रेगेक्स उच्च रेटेड संस्करण पर मेरा ले लिया गया है

 if (typeof String.endsWith !== 'function') { String.prototype.endsWith = function (suffix) { return this.indexOf(suffix, this.length - suffix.length) !== -1; }; } 

@ चाकृत का स्वीकृत उत्तर अपने आप को करने का एक ठोस तरीका है अगर, हालांकि, आप एक पैकेड समाधान की तलाश में हैं, तो मैं सुझाता हूं कि अंडरस्कोर । स्ट्रिंग पर एक नज़र डालें, जैसा कि @mlunoe ने बताया। अंडरस्कोर का उपयोग करना। स्ट्रिंग, कोड होगा:

 function endsWithHash(str) { return _.str.endsWith(str, '#'); } 
 function check(str) { var lastIndex = str.lastIndexOf('/'); return (lastIndex != -1) && (lastIndex == (str.length - 1)); } 

यदि आप lasIndexOf या substr का उपयोग नहीं करना चाहते हैं तो क्यों न सिर्फ स्ट्रिंग को अपनी प्राकृतिक स्थिति में दिखाना (यानी सरणी)

 String.prototype.endsWith = function(suffix) { if (this[this.length - 1] == suffix) return true; return false; } 

या एक स्टैंडअलोन फ़ंक्शन के रूप में

 function strEndsWith(str,suffix) { if (str[str.length - 1] == suffix) return true; return false; } 
 String.prototype.endWith = function (a) { var isExp = a.constructor.name === "RegExp", val = this; if (isExp === false) { a = escape(a); val = escape(val); } else a = a.toString().replace(/(^\/)|(\/$)/g, ""); return eval("/" + a + "$/.test(val)"); } // example var str = "Hello"; alert(str.endWith("lo")); alert(str.endWith(/l(o|a)/)); 

यह @ चर्किट के स्वीकृत उत्तर पर स्ट्रिंग्स का एक सरणी या एक तर्क के रूप में पारित करने के लिए अनुमति देता है।

 if (typeof String.prototype.endsWith === 'undefined') { String.prototype.endsWith = function(suffix) { if (typeof suffix === 'String') { return this.indexOf(suffix, this.length - suffix.length) !== -1; }else if(suffix instanceof Array){ return _.find(suffix, function(value){ console.log(value, (this.indexOf(value, this.length - value.length) !== -1)); return this.indexOf(value, this.length - value.length) !== -1; }, this); } }; } 

इसके लिए underscorej आवश्यक है – लेकिन शायद अधिशेष निर्भरता को दूर करने के लिए समायोजित किया जा सकता है।

 if(typeof String.prototype.endsWith !== "function") { /** * String.prototype.endsWith * Check if given string locate at the end of current string * @param {string} substring substring to locate in the current string. * @param {number=} position end the endsWith check at that position * @return {boolean} * * @edition ECMA-262 6th Edition, 15.5.4.23 */ String.prototype.endsWith = function(substring, position) { substring = String(substring); var subLen = substring.length | 0; if( !subLen )return true;//Empty string var strLen = this.length; if( position === void 0 )position = strLen; else position = position | 0; if( position < 1 )return false; var fromIndex = (strLen < position ? strLen : position) - subLen; return (fromIndex >= 0 || subLen === -fromIndex) && ( position === 0 // if position not at the and of the string, we can optimise search substring // by checking first symbol of substring exists in search position in current string || this.charCodeAt(fromIndex) === substring.charCodeAt(0)//fast false ) && this.indexOf(substring, fromIndex) === fromIndex ; }; } 

लाभ:

  • यह संस्करण केवल अनुक्रमणिकाऑफ़ का उपयोग नहीं कर रहा है
  • लंबी तार पर सबसे अच्छा प्रदर्शन यहां एक स्पीड टेस्ट है http://jsperf.com/starts-ends-with/4
  • पारिस्थितिकी विनिर्देश के साथ पूरी तरह से संगत। यह परीक्षण पास करता है

नियमित अभिव्यक्ति का उपयोग न करें वे धीमी गति से भी तेजी से भाषाओं में हैं बस एक फ़ंक्शन लिखें जो एक स्ट्रिंग के अंत की जांच करता है। इस पुस्तकालय में अच्छे उदाहरण हैं: groundjs / util.js String.prototype के लिए एक फ़ंक्शन जोड़ने से सावधान रहें इस कोड में यह अच्छा उदाहरण है कि कैसे करें: groundjs / prototype.js सामान्य तौर पर, यह एक अच्छी भाषा-स्तर की लाइब्रेरी है: groundjs आप कॉलशिप पर एक नज़र भी देख सकते हैं

वे सभी बहुत उपयोगी उदाहरण हैं String.prototype.endsWith = function(str) को जोड़ने से हमें यह जांचने के लिए विधि को कॉल करने में मदद मिलेगी कि हमारी स्ट्रिंग इसके साथ समाप्त हो जाती है या नहीं, ठीक regexp भी ऐसा करेगा।

मुझे मेरा से बेहतर समाधान मिला सबको धन्यवाद।

Coffeescript के लिए

 String::endsWith = (suffix) -> -1 != @indexOf suffix, @length - suffix.length 

जवाब के सभी लंबे समय के बाद, मुझे यह कोड सरल और समझने में आसान पाया गया!

 function end(str, target) { return str.substr(-target.length) == target; } 

7 साल का पद, लेकिन मैं शीर्ष कुछ पदों को समझने में सक्षम नहीं था, क्योंकि वे जटिल हैं। इसलिए, मैंने अपना खुद का समाधान लिखा था:

 function strEndsWith(str, endwith) { var lastIndex = url.lastIndexOf(endsWith); var result = false; if (lastIndex > 0 && (lastIndex + "registerc".length) == url.length) { result = true; } return result; }