javascript - বাংলায় জাভাস্ক্রিপ্ট




শেষ জাভাস্ক্রিপ্ট মধ্যে (20)

কিভাবে একটি স্ট্রিং জাভাস্ক্রিপ্ট একটি নির্দিষ্ট চরিত্র সঙ্গে শেষ হবে কিনা তা আমি কিভাবে পরীক্ষা করতে পারি?

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

var str = "mystring#";

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

  1. জাভাস্ক্রিপ্ট মধ্যে একটি endsWith() পদ্ধতি আছে?

  2. আমার একটি সমাধান স্ট্রিং এর দৈর্ঘ্য নিতে এবং শেষ অক্ষর পেতে এবং এটি চেক।

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


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

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

Coffeescript জন্য

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

Regex ব্যবহার করে, আমার জন্য একটি কবজ মত কাজ যে শুধু আরেকটি দ্রুত বিকল্প:

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

আমি শুধু এই স্ট্রিং লাইব্রেরি সম্পর্কে শিখেছি:

http://stringjs.com/

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

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

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

npm install string

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

var S = require('string');

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


আসুন, এই সঠিক endsWith বাস্তবায়ন সঙ্গে:

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

lastIndexOf ব্যবহার করে যদি কোন মিল না থাকে তবে কেবল অপ্রয়োজনীয় CPU লুপ তৈরি করে।


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

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

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

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


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

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

এখানে পড়ুন: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith

অতএব উত্তর হিসাবে উল্লিখিত স্থানীয় বাস্তবায়ন অস্তিত্ব জন্য চেক যোগ করার জন্য অত্যন্ত সুপারিশ করা হয়।


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

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


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


যদি আপনি lodash ব্যবহার lodash :

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

লোডশ ব্যবহার না করলে, আপনি তার source থেকে ধার নিতে পারেন।


যদি আপনি 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;
}

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

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

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith থেকে https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith

সারাংশ

endsWith() পদ্ধতি অন্য স্ট্রিংয়ের অক্ষরগুলির সাথে একটি স্ট্রিং শেষ হয় কিনা তা নির্ধারণ করে, যথাযথ হিসাবে সত্য বা endsWith() ফেরত দেয়।

বাক্য গঠন

str.endsWith(searchString [, position]);

পরামিতি

  • searchString : এই স্ট্রিং শেষে অক্ষর অনুসন্ধান করা হবে।

  • অবস্থান : এই স্ট্রিংয়ের মধ্যে অনুসন্ধান করুন যদি এই স্ট্রিং শুধুমাত্র এই দীর্ঘ ছিল; এই স্ট্রিং এর দৈর্ঘ্য দ্বারা প্রতিষ্ঠিত পরিসীমা মধ্যে clamped, এই স্ট্রিং এর প্রকৃত দৈর্ঘ্য ডিফল্ট।

বিবরণ

এই পদ্ধতিটি আপনি অন্য স্ট্রিং সঙ্গে একটি স্ট্রিং শেষ কিনা তা নির্ধারণ করতে দেয়।

উদাহরণ

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 ভাষা স্পেসিফিকেশন 6 র্থ সংস্করণ (ECMA-262)

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


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

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

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

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

মূল উত্তর:

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

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

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

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

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

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

উপকারিতা:

  • এই সংস্করণটি শুধু indexOf ব্যবহার করে না।
  • দীর্ঘ স্ট্রিং গ্রেটতম কর্মক্ষমতা। এখানে একটি গতি পরীক্ষা http://jsperf.com/starts-ends-with/4
  • Ecmascript স্পেসিফিকেশন সঙ্গে সম্পূর্ণরূপে সামঞ্জস্যপূর্ণ। এটা tests পাস করে

if( ("mystring#").substr(-1,1) == '#' )

- অথবা -

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

/#$/.test(str)

সব ব্রাউজারে কাজ করবে, বানর প্যাচিং String প্রয়োজন হবে না, এবং শেষ String স্ক্যান করার প্রয়োজন নেই lastIndexOf যদি কোন মিল নেই।

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

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

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

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

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




ends-with