জাভাস্ক্রিপ্ট সহ


1103

জাভা স্ক্রিপ্টের একটি নির্দিষ্ট অক্ষর দিয়ে একটি স্ট্রিং শেষ হয়েছে কিনা তা আমি কীভাবে পরীক্ষা করতে পারি?

উদাহরণ: আমার একটি স্ট্রিং আছে

var str = "mystring#";

আমি জানতে চাই যে সেই স্ট্রিংটি শেষ হচ্ছে কিনা #। আমি কীভাবে এটি পরীক্ষা করতে পারি?

  1. endsWith()জাভাস্ক্রিপ্টে কোনও পদ্ধতি আছে?

  2. আমার কাছে একটি সমাধান হ'ল স্ট্রিংয়ের দৈর্ঘ্য নেওয়া এবং শেষ চরিত্রটি পেয়ে এটি পরীক্ষা করুন।

এটি কি সেরা উপায় বা অন্য কোনও উপায় আছে?


5
এই একটি সম্পর্কিত প্রশ্ন হতেই হবে stackoverflow.com/questions/646628/javascript-startswith
হামিশ Grubijan

উত্তর:


1764

আপডেট (24 নভেম্বর, 2015):

এই উত্তরটি মূলত ২০১০ সালে পোস্ট করা হয়েছে (ষাট বছর আগের) so সুতরাং দয়া করে এই অন্তর্দৃষ্টিপূর্ণ মন্তব্যগুলির জন্য নোট করুন:

  • Shauna - Googlers দের জন্য আপডেট - ECMA6 মত দেখায় এই ফাংশন যোগ করা। এমডিএন নিবন্ধে একটি পলিফিলও দেখানো হয়েছে। https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith

  • টিজে ক্রাউডার - আধুনিক ব্রাউজারগুলিতে সাবস্ট্রিংগুলি তৈরি করা ব্যয়বহুল নয়; এটি উত্তর পোস্ট করা হয়েছিল যখন 2010 সালে ভাল হতে পারে। আজকাল, সহজ this.substr(-suffix.length) === suffixপদ্ধতির ক্রোমটিতে দ্রুততম, ইন্ডেক্সআফ হিসাবে আইই 11 তে একই, এবং ফায়ারফক্সে কেবল 4% ধীর (ফেরেগেটআউটিট অঞ্চল): jsperf.com/endswith-stackoverflow/14 এবং ফলাফলটি মিথ্যা হলে বোর্ড জুড়ে দ্রুত: jsperf.com/endswith-stackoverflow-wen-false অবশ্যই, ES6 এর প্রান্ত যুক্ত হওয়ার সাথে, বিন্দুটি মোটা। :-)


মূল উত্তর:

আমি জানি এটি একটি বছরের পুরানো প্রশ্ন ... তবে আমার এটিও দরকার এবং ক্রস ব্রাউজারে কাজ করাও আমার প্রয়োজন তাই ... প্রত্যেকের উত্তর এবং মন্তব্যগুলিকে একত্রিত করে কিছুটা সরল করে তোলা:

String.prototype.endsWith = function(suffix) {
    return this.indexOf(suffix, this.length - suffix.length) !== -1;
};
  • সাবস্ট্রিং তৈরি করে না
  • নেটিভ ব্যবহার করে indexOfদ্রুত ফলাফলের জন্য ফাংশন ব্যবহার করে
  • দ্বিতীয় প্যারামিটার ব্যবহার করে অপ্রয়োজনীয় তুলনা ছেড়ে যান indexOfএগিয়ে এড়াতে এড়িয়ে যান
  • ইন্টারনেট এক্সপ্লোরারে কাজ করে
  • কোন রেজেক্স জটিলতা

এছাড়াও, যদি আপনি দেশীয় ডেটা স্ট্রাকচারের প্রোটোটাইপগুলিতে স্টাফিং পছন্দ না করেন তবে এখানে একটি স্বতন্ত্র সংস্করণ:

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

সম্পাদনা: মন্তব্যগুলিতে @ হ্যামিশ দ্বারা উল্লিখিত হিসাবে, আপনি যদি নিরাপদ দিক থেকে ভুল করতে চান এবং কোনও প্রয়োগ ইতিমধ্যে সরবরাহ করা হয়েছে কিনা তা পরীক্ষা করতে চান, আপনি ঠিক তেমন একটি typeofচেক যোগ করতে পারেন:

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

42
গুগলারের জন্য আপডেট - দেখে মনে হচ্ছে ECMA6 এই ফাংশনটি যুক্ত করে। এমডিএন নিবন্ধে একটি পলিফিলও দেখানো হয়েছে। বিকাশকারী.মোজিলা.আর.ইন-
ইউএস

2
@ lukas.pukenis এটি শেষ এড়ায় এবং কেবল প্রত্যয়টির একদম একেবারে শেষে পরীক্ষা করে। অনুসন্ধানের স্ট্রিং অন্য কোথাও প্রদর্শিত হচ্ছে তাতে কিছু আসে যায় না।
চકૃત

3
"প্রত্যয়" যুক্তিটি সংজ্ঞায়িত না হলে পরিস্থিতিটির জন্য একটি চেক যুক্ত করা: "(স্ট্রিং.প্রোটোটাইপ.অ্যান্ডস উইথ! == 'ফাংশন') {স্ট্রিং.প্রোটোটাইপ.এন্ডসভিথ = ফাংশন (প্রত্যয়) this ফিরিয়ে দিন ind indexOf (প্রত্যয়) , this.length - ((প্রত্যয় && suffix.length) || 0)) == -1;};}
Mandeep

2
আপনি উল্লেখ করেছেন রেজেক্স জটিলতাগুলি কী কী?
আইসডড্যান্ট

5
আধুনিক ব্রাউজারগুলিতে সাবস্ট্রিংগুলি তৈরি করা ব্যয়বহুল নয়; এটি উত্তর পোস্ট করা হয়েছিল যখন 2010 সালে ভাল হতে পারে। আজকাল, সহজ this.substr(-suffix.length) === suffixপদ্ধতির indexOfক্রোমটিতে দ্রুততম, আইই 11 এর মতো এবং ফায়ারফক্সে কেবল 4% ধীর (ফেরেগেটআউটিট অঞ্চল): jsperf.com/endswith-stackoverflow/14 এবং বোর্ডটি জুড়ে দ্রুত ফলাফল যখন ফলটি মিথ্যা হয়: jsperf .com / শেষের সাথে-স্ট্যাকওভারফ্লো-যখন-মিথ্যা অবশ্যই, ES6 যুক্ত করার সাথে endsWith, বিন্দুটি মোটা। :-)
টিজে ক্রাউডার

295
/#$/.test(str)

সমস্ত ব্রাউজারে কাজ করবে, বাঁদর প্যাচিংয়ের Stringপ্রয়োজন নেই এবং lastIndexOfকোনও মিল নেই যখন পুরো স্ট্রিংটি স্ক্যান করার প্রয়োজন হয় না ।

আপনি যদি কোনও ধ্রুব স্ট্রিংয়ের সাথে মিল রাখতে চান যা নিয়মিত অভিব্যক্তি বিশেষ অক্ষরগুলি ধারণ করে, যেমন '$', তবে আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন:

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

এবং তারপরে আপনি এটি এটি ব্যবহার করতে পারেন

makeSuffixRegExp("a[complicated]*suffix*").test(str)

10
আপনি যদি ধ্রুবক সাবস্ট্রিংয়ের জন্য যাচাই করেন তবে এটি দুর্দান্ত এবং সহজ।
ওয়ারেন ব্লাঞ্চেট

1
সর্বশেষে সমস্ত স্ট্রিং স্ক্যান করে? আমি ভেবেছিলাম এটি ভিক্ষাবৃত্তির শেষ থেকে অনুসন্ধান করবে।
টম ব্রিটো

3
@ টমব্রিটো, lastIndexOfপুরো স্ট্রিংটি কেবল তখনই স্ক্যান করে যদি এটি কোনও মিল খুঁজে না পায় বা শুরুতে কোনও ম্যাচ খুঁজে পায়। যদি শেষে কোনও মিল থাকে তবে এটি প্রত্যয়ের দৈর্ঘ্যের সাথে আনুপাতিকভাবে কাজ করে। হ্যাঁ, শেষ /asdf$/.test(str)হওয়ার strসাথে সাথে সত্য ফলন হয় "asdf"
মাইক স্যামুয়েল

3
@ টম ব্রিটো, এটি একটি নিয়মিত অভিব্যক্তি। সিনট্যাক্স পার্ল থেকে ধার করা হয়েছে। বিকাশকারী.মোজিলা.আর.ইন.ইন / কোর_জবাস্ক্রিপ্ট_1.5_ গুয়েড /… দেখুন বা অযথা স্তরের বিশদর জন্য দেখুন ইকমাস্ক্রিপ্ট ভাষার স্পেসিফিকেশনের 7..৮.৫ অংশ দেখুন।
মাইক স্যামুয়েল

2
ক্রস ব্রাউজার সামঞ্জস্যের জন্য +1। ক্রোম 28.0.1500.72 মি, ফায়ারফক্স 22.0, এবং IE9 এ পরীক্ষিত।
এড্রিয়েন

91
  1. দুর্ভাগ্যবশত না.
  2. if( "mystring#".substr(-1) === "#" ) {}

14
@ অ্যান্টনি, উম ... সুতরাং ব্যবহার করুন। দৈর্ঘ্য -১, সমস্যা কী? if (mystring.substr (mystring.length-1) === "#")} IE IE এ ঠিক কাজ করে।
BrainSlugs83

12
@ ব্রেনস্লাগস ৩৩ - এটি হ'ল সমস্যা: '। দৈর্ঘ্য -১' সিনট্যাক্স আইইতে কাজ করে এবং '-1' সিনট্যাক্সটি কাজ করে না। এটি মনে রাখার মতো কিছু, তাই টিপটির জন্য অ্যান্টনির কাছে +1।
avramov

2
আপনি ব্যবহার করতে পারবেন না slice()? এটি আমার দ্রুত আই 7 পরীক্ষায় আমার জন্য কাজ করে।
অ্যালেক্স

আইইন ফ্রিকেন। কখন মারা যাবে?
আহ্নবিজক্যাড

67

আসুন, এটি সঠিক endsWithবাস্তবায়ন:

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

lastIndexOfকোনও মিল না থাকলে কেবলমাত্র অপ্রয়োজনীয় সিপিইউ লুপগুলি ব্যবহার করে।


2
একমত। আমি সত্যিই অনুভব করি যে এটি দেওয়া সবচেয়ে পারফরম্যান্স সমাধান হিসাবে এটি আর্দ্রতা / স্যানিটি পরীক্ষা করা হয়, এটি সংক্ষিপ্ত এবং সংক্ষিপ্ত, এটি মার্জিত (স্ট্রিং প্রোটোটাইপকে ওভারলোডিং) এবং স্ট্রিংটি রিজেক্স ইঞ্জিনটি কাটানোর চেয়ে কোনও সংস্থার হিটের মতো কম মনে হয়।
BrainSlugs83

এই সমাধানটিও পছন্দ করুন। কেবল ফাংশনের নামটি ভুল বানানযুক্ত। "শেষ সহ" হওয়া উচিত।
xmedeko

3
@ ব্রেইনস্লাগস ৩৮ বছর কয়েক বছর হয়েছে, তবে এখন এই পদ্ধতিটি উপরে বর্ণিত চক্র দ্বারা উল্লিখিত 'ইনডেক্স অফ' পদ্ধতির চেয়ে দ্রুত আর সাফারির আওতায়, এটি ৩০% ধীর! প্রায় 50-চরিত্রের স্ট্রিং সম্পর্কে ব্যর্থতার ক্ষেত্রে এখানে একটি jscreen পরীক্ষা দেওয়া হয়েছে: jsperf.com/endswithcomp तुलना
ব্রেন্ট ফাস্ট

4
সম্ভবত ===যদিও ব্যবহার করা উচিত ।
টিম্ম্ম্ম

56

এই সংস্করণটি একটি স্ট্রিং তৈরি করা এড়ায়, এবং নিয়মিত এক্সপ্রেশন ব্যবহার করে না (এখানে কিছু রেগেক্স উত্তরগুলি কাজ করবে; অন্যরা ভাঙা হয়েছে):

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

যদি পারফরম্যান্স আপনার কাছে গুরুত্বপূর্ণ হয় তবে এটি lastIndexOfসাবস্ট্রিং তৈরির চেয়ে আসলে দ্রুত কিনা তা পরীক্ষা করার উপযুক্ত হবে । (আপনি যে জেএস ইঞ্জিনটি ব্যবহার করছেন এটি এটির উপর নির্ভর করে ...) এটি ম্যাচের ক্ষেত্রে খুব দ্রুত হতে পারে এবং যখন স্ট্রিং ছোট হয় - তবে যখন স্ট্রিং বিশাল হয় তখন এমনকি পুরো জিনিসটি একবারে ফিরে তাকাতে হবে needs যদিও আমরা সত্যিই যত্নশীল না :(

একটি একক অক্ষর পরীক্ষা করার জন্য, দৈর্ঘ্য সন্ধান করা এবং তারপরে ব্যবহার charAtকরা সম্ভবত সবচেয়ে ভাল উপায়।


2
যদি এটি.এলস্টাইন্ডেক্সঅফ () -1 প্রদান করে তবে আপনি এই ক্ষেত্রে আঘাত করতে পারেন যেখানে এটি এই দৈর্ঘ্যের এবং স্ট্রিংয়ের দৈর্ঘ্যের উপর নির্ভর করে depend ()! = -1 সর্বশেষে একটি পরীক্ষা যুক্ত করুন Add
ইব্রুচেজ

1
কেন রেজেক্স পদ্ধতিটি ভেঙে গেছে?
izb

2
@ আইজবি: আমার থেকে পুরানো উত্তরগুলি যা str+"$"রেজেক্স হিসাবে ব্যবহার করার চেষ্টা করে সেগুলি ভেঙে গেছে, কারণ এগুলি বৈধ পুনঃসংশ্লিষ্ট হতে পারে না।
জন স্কিটি

26

sliceপদ্ধতি সহ apporach দেখেন নি । সুতরাং আমি এটি এখানে রেখেছি:

function endsWith(str, suffix) {
    return str.slice(-suffix.length) === suffix
}

1
আপনি এটিকে আরও কিছুটা সরল করতে পারেন: str.slice (-1) === প্রত্যয়টি ফিরুন;
এরিক কে।

2
এটি সেরা উত্তর। নিশ্চিত না কেন এটিতে আরও বেশি অগ্রগতি নেই।
নিউক্লিটিড

17
return this.lastIndexOf(str) + str.length == this.length;

যে ক্ষেত্রে মূল স্ট্রিংয়ের দৈর্ঘ্য অনুসন্ধানের স্ট্রিং দৈর্ঘ্যের চেয়ে কম এবং অনুসন্ধান স্ট্রিংটি পাওয়া যায় না সে ক্ষেত্রে কাজ করে না:

সর্বশেষআইডেক্সফ -1 ফেরত দেয়, তারপরে আপনি অনুসন্ধানের স্ট্রিংয়ের দৈর্ঘ্য যুক্ত করেন এবং আপনি মূল স্ট্রিংয়ের দৈর্ঘ্য রেখে যান।

একটি সম্ভাব্য ফিক্স হয়

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

30
আপনি "জোন স্কিটের উত্তরে একটি ভুল খুঁজে পেয়েছেন" ব্যাজটি অর্জন করেছেন। বিশদ জন্য আপনার প্রোফাইল দেখুন।
বোবিনস

17

বিকাশকারী.মোজিলা.অর্গ স্ট্রিং.প্রোটোটাইপ.েন্ডস উইথ () সহ

সারসংক্ষেপ

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

বিশেষ উল্লেখ

ECMAScript ভাষা নির্দিষ্টকরণ 6th ষ্ঠ সংস্করণ (ECMA-262)

ব্রাউজার সামঞ্জস্য

ব্রাউজার সামঞ্জস্য



8
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;
}

রেজেক্স অব্যাহতি সিকোয়েন্সগুলির জন্য আপনাকে আপনার স্ট্রিংটি এড়াতে হবে
জুয়ান মেন্ডেস

1
নিয়মিত এক্সপ্রেশন দ্রুত ভাষায় এমনকি ধীর হয়। কেবল একটি স্ট্রিংয়ের শেষে পরীক্ষা করুন।
ড্যানিয়েল নুরিয়েভ

8

আমি আপনার সম্পর্কে জানি না, তবে:

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

নিয়মিত প্রকাশ কেন? প্রোটোটাইপ নিয়ে গণ্ডগোল কেন? substr? এসো ...


'চুদাচুদি কখনও কখনও এটি WET
মার্টিন ক্যাপোডিসি

8

রেগেক্স ব্যবহার করে আমার জন্য আকর্ষণীয় কাজ করার মতো আরও একটি দ্রুত বিকল্প:

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


6

আমি কেবল এই স্ট্রিং লাইব্রেরি সম্পর্কে জানতে পারি:

http://stringjs.com/

জেএস ফাইল অন্তর্ভুক্ত করুন এবং তার পরে Sভেরিয়েবলটি ব্যবহার করুন :

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

এটি ইনস্টল করে নোডজেএসেও ব্যবহার করা যেতে পারে:

npm install string

তারপরে এটি Sপরিবর্তনশীল হিসাবে প্রয়োজনীয় :

var S = require('string');

ওয়েব পৃষ্ঠাতে বিকল্প স্ট্রিং গ্রন্থাগারগুলির লিঙ্কগুলিও রয়েছে, যদি এটি কোনও আপনার অভিনব ব্যবহার না করে।


4
function strEndsWith(str,suffix) {
  var reguex= new RegExp(suffix+'$');

  if (str.match(reguex)!=null)
      return true;

  return false;
}

1
আপনার কোড কেন সমস্যার সমাধান করে তা যদি আপনি ব্যাখ্যা করেন তবে এটি আরও ভাল । কীভাবে উত্তর দিতে হয় গাইড দেখুন ।
brasofilo

প্রত্যয় যুক্তিটি রেগেক্স এক্সপ্রেশনগুলির জন্য স্ক্যান করা উচিত যা পালাতে হবে। ইনডেক্সফ বা লাস্ট ইন্ডেক্সঅফ ব্যবহার করা আরও ভাল বিকল্প বলে মনে হচ্ছে।
vlad_tepesch

প্রত্যয়টিতে এই
চরিত্রগুলির মধ্যে কোনওটি

4

এত ছোট সমস্যার জন্য এত কিছু, কেবল এই নিয়মিত এক্সপ্রেশনটি ব্যবহার করুন

var str = "mystring#";
var regex = /^.*#$/

if (regex.test(str)){
  //if it has a trailing '#'
}


4

এই প্রশ্নের অনেক বছর হয়ে গেছে। আমি যে ব্যবহারকারীরা সর্বাধিক ভোটপ্রাপ্ত চক্রীর উত্তরটি ব্যবহার করতে চায় তাদের জন্য একটি গুরুত্বপূর্ণ আপডেট যুক্ত করব।

ইসেমাস্ক্রিপ্ট ((পরীক্ষামূলক প্রযুক্তি) এর অংশ হিসাবে জাভাস্ক্রিপ্টে ইতিমধ্যে 'ফাংশন' যুক্ত করা হয়েছে

এটি এখানে উল্লেখ করুন: https://developer.mozilla.org/en/docs/Web/ জাভা স্ক্রিপ্ট / রেফারেন্স / গ্লোবাল_অবজেক্টস / স্ট্রিং / endsWith

সুতরাং উত্তরে বর্ণিত দেশীয় প্রয়োগের অস্তিত্বের জন্য চেক যুক্ত করার পক্ষে এটি সুপারিশ করা হয়।


2
function check(str)
{
    var lastIndex = str.lastIndexOf('/');
    return (lastIndex != -1) && (lastIndex  == (str.length - 1));
}

2

ভবিষ্যতের প্রুফের একটি উপায় এবং / বা বিদ্যমান প্রোটোটাইপের ওভাররাইটিং প্রতিরোধের এটি পরীক্ষা স্ট্রিং প্রোটোটাইপটিতে ইতিমধ্যে যুক্ত করা হয়েছে কিনা তা পরীক্ষা করে দেখা হবে। এখানে নন-রেজেক্স উচ্চ রেটযুক্ত সংস্করণটি গ্রহণ করব।

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

ব্যবহার if (!String.prototype.hasOwnProperty("endsWith"))করা সবচেয়ে ভাল উপায়। সঙ্গে typeof"MooTools এবং অন্যান্য AJAX এর লাইব্রেরি কিছু আপনি আপ স্ক্রু হবে", "জাভাস্ক্রিপ্ট উপর Crockford - শ্রেনী 7 দ্য নিউ যন্ত্রাংশ: নাম ECMAScript 5" অনুযায়ী, 15:50 মিনিট এ।
এক্সপি 1

2

@ চক্রীর গৃহীত উত্তর এটি নিজেই করার একটি শক্ত উপায় way যদি যাইহোক, আপনি প্যাকেজযুক্ত সমাধানটি সন্ধান করছেন, আমি @ এমিলুনি দেখিয়েছি, আন্ডারস্কোর . স্ট্রিংয়ের দিকে নজর দেওয়ার পরামর্শ দিই। আন্ডারস্কোর. স্ট্রিং ব্যবহার করে কোডটি হ'ল:

function endsWithHash(str) {
  return _.str.endsWith(str, '#');
}

1

আপনি যদি লাস্টআইন্ডেক্সফ বা সাবস্ট্রটার ব্যবহার করতে না চান তবে কেন কেবল স্ট্রিংটিকে তার প্রাকৃতিক অবস্থায় দেখবেন না (যেমন, একটি অ্যারে)

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;
}

1
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)/));

1

এই দীর্ঘ উত্তরগুলির পরেও, আমি এই কোডটি খুব সহজ এবং সহজেই বুঝতে পেলাম!

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

1

এটি শেষের সাথে বাস্তবায়ন String.prototype.endsWith = function (str) { return this.length >= str.length && this.substr(this.length - str.length) == str; }


1

এটি এর বাস্তবায়ন endsWith:

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

0

এটি @ চরকিটের গৃহীত উত্তরের উপর ভিত্তি করে হয় একটি অ্যারে বা একটি স্ট্রিংকে আর্গুমেন্ট হিসাবে পাস করার অনুমতি দেয়।

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);
        }
    };
}

এর জন্য আন্ডারস্কোর প্রয়োজন - তবে সম্ভবত আন্ডারস্কোর নির্ভরতা অপসারণ করতে সামঞ্জস্য করা যেতে পারে।


1
এটি একটি খারাপ সমাধান, এর পরিবর্তে আপনি যদি ইতিমধ্যে আন্ডারস্কোর ব্যবহার করে থাকেন তবে আপনার এই নির্ভরযোগ্যতাগুলিতে এই Epeli.github.io/:30sC.string যুক্ত করা উচিত এবং তাদের প্রয়োগটি ব্যবহার করা উচিত :_.str.endsWith
mlunoe

0
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
        ;
    };
}

উপকারিতা:

  • এই সংস্করণটি কেবল সূচি-পুনরায় ব্যবহারের নয় is
  • দীর্ঘ স্ট্রিংয়ে দুর্দান্ত পারফরম্যান্স। এখানে একটি গতি পরীক্ষা http://jsperf.com/starts-ends-with/4 রয়েছে
  • বাস্তুসংক্রান্ত স্পেসিফিকেশনের সাথে সম্পূর্ণ সুসংগত। এটি পরীক্ষায় পাস করে

0

নিয়মিত ভাব প্রকাশ করবেন না। এগুলি দ্রুত ভাষায়ও ধীর। কেবল একটি ফাংশন লিখুন যা কোনও স্ট্রিংয়ের শেষে পরীক্ষা করে। এই লাইব্রেরিতে চমৎকার উদাহরণ রয়েছে: গ্রাউন্ডজ / ইউজার.জেএস । স্ট্রিং.প্রোটোটাইপে কোনও ফাংশন যুক্ত করতে সাবধান হন। কীভাবে এটি করা যায় তার উদাহরণ এই কোডটিতে রয়েছে : গ্রাউন্ডজ / প্রোটোটাইপ.জেএস সাধারণভাবে, এটি একটি দুর্দান্ত ভাষা-স্তরের লাইব্রেরি: গ্রাউন্ডজগুলি আপনি লোটাসের দিকেও নজর দিতে পারেন


0

তাদের সমস্ত খুব দরকারী উদাহরণ। যোগ করার পদ্ধতিString.prototype.endsWith = function(str) আমাদের স্ট্রিংটি দিয়ে শেষ হয় কিনা তা পরীক্ষা করার জন্য পদ্ধতিটিকে কল করতে সাহায্য করবে, ভাল রিজেক্সপও এটি করবে।

আমার চেয়ে ভাল সমাধান খুঁজে পেয়েছি। ধন্যবাদ সবাইকে.


0

Coffeescript জন্য

String::endsWith = (suffix) ->
  -1 != @indexOf suffix, @length - suffix.length
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.