স্ট্রিংয়ে জাভাস্ক্রিপ্টে একটি স্ট্রিং রয়েছে কিনা তা কীভাবে পরীক্ষা করবেন?


7427

সাধারণত আমি একটি String.contains()পদ্ধতি আশা করতাম , তবে এটির একটি বলে মনে হয় না।

এটি যাচাই করার জন্য যুক্তিসঙ্গত উপায় কী?

উত্তর:


13769

ইসমাস্ক্রিপ্ট introduced চালু করা হয়েছে String.prototype.includes:

const string = "foo";
const substring = "oo";

console.log(string.includes(substring));

includes যদিও ইন্টারনেট এক্সপ্লোরার সমর্থন নেই। ECMAScript 5 বা তার চেয়ে বেশি পুরানো পরিবেশে, ব্যবহার করুন String.prototype.indexOf, যা -1 ফেরত আসে যখন একটি স্ট্রিংং পাওয়া যায় না:

var string = "foo";
var substring = "oo";

console.log(string.indexOf(substring) !== -1);


25
আমিও পছন্দ করি না, তবে আপনার যদি দুটি ফাংশন থাকে যা মূলত অভিন্ন, এবং একটিতে অন্যটির চেয়ে ভাল সমর্থিত হয়, তবে আমার মনে হয় আপনার আরও ভাল সমর্থিত কোনওটি বেছে নেওয়া উচিত? সুতরাং indexOf()এটি ...
rob74

3
একটি মামলা সংবেদনশীল অনুসন্ধান করা সম্ভব?
এরিক ম্যাকউইননার

18
string.toUpperCase().includes(substring.toUpperCase())
রডরিগো পিন্টো

2
@ এরিক এমসিউইনএনআর /regexpattern/i.test(str)-> আমি পতাকাটি মামলার সংবেদনশীলতার জন্য দাঁড়িয়েছে
কোড ম্যানিয়াক

এটি গুগল অ্যাপ স্ক্রিপ্টে আমার পক্ষে কাজ করবে বলে মনে হচ্ছে না।
রায়ান

559

String.prototype.includesES6 এ একটি রয়েছে :

"potato".includes("to");
> true

নোট করুন যে এটি ইন্টারনেট এক্সপ্লোরার বা কোনও অপূর্ণ ES6 সমর্থন সহ কিছু পুরানো ব্রাউজারে কাজ করে না । এটি পুরানো ব্রাউজারগুলিতে কাজ করতে আপনি বাবেলের মতো ট্রান্সপ্লেলার , এসআই-শিমের মতো শিম লাইব্রেরি বা এমডিএন থেকে এই পলিফিল ব্যবহার করতে পারেন :

if (!String.prototype.includes) {
  String.prototype.includes = function(search, start) {
    'use strict';
    if (typeof start !== 'number') {
      start = 0;
    }

    if (start + search.length > this.length) {
      return false;
    } else {
      return this.indexOf(search, start) !== -1;
    }
  };
}

3
"potato".includes("to");বাবেলের মাধ্যমে এটি করুন এবং চালান।
ডার্ক জান স্পিলম্যান

1
অন্তর্ভুক্তগুলি দুঃখের সাথে আইই দ্বারা সমর্থিত নয়
মিষ্টি চিলি ফিলি

@ এলিয়োকস আপনি এটির উত্তর দিতে পারেন। আমি যে কোনও একটি বার্তা পাচ্ছি। বার্তা পরিবর্তন করতে হবে stackoverflow.com/questions/61273744/...
sejn

1
এর জন্য আরও একটি প্লাস হ'ল কেস সংবেদনশীলও। "boot".includes("T")হলfalse
জোনাটাস সিডি

47

আর একটি বিকল্প হ'ল কেএমপি (নুথ – মরিস – প্র্যাট)।

একটি length- জন্য KMP অ্যালগরিদম অনুসন্ধান মি একটি length- মধ্যে সাবস্ট্রিং এন স্ট্রিং খারাপ-কেস হে মধ্যে ( এন + + মি হে (একটি খারাপ-কেস তুলনায়) সময়, এনমি সাদাসিধা অ্যালগরিদম জন্য), তাই KMP ব্যবহার may আপনি যদি সবচেয়ে খারাপ সময়ের জটিলতার বিষয়ে চিন্তা করেন তবে যুক্তিযুক্ত হন।

Https://www.nayuki.io/res/knuth-morris-pratt-string-matching/kmp-string-matcher.js থেকে নেওয়া প্রজেক্ট নয়ুকির একটি জাভাস্ক্রিপ্ট বাস্তবায়ন এখানে রয়েছে :

// Searches for the given pattern string in the given text string using the Knuth-Morris-Pratt string matching algorithm.
// If the pattern is found, this returns the index of the start of the earliest match in 'text'. Otherwise -1 is returned.

function kmpSearch(pattern, text) {
  if (pattern.length == 0)
    return 0; // Immediate match

  // Compute longest suffix-prefix table
  var lsp = [0]; // Base case
  for (var i = 1; i < pattern.length; i++) {
    var j = lsp[i - 1]; // Start by assuming we're extending the previous LSP
    while (j > 0 && pattern.charAt(i) != pattern.charAt(j))
      j = lsp[j - 1];
    if (pattern.charAt(i) == pattern.charAt(j))
      j++;
    lsp.push(j);
  }

  // Walk through text string
  var j = 0; // Number of chars matched in pattern
  for (var i = 0; i < text.length; i++) {
    while (j > 0 && text.charAt(i) != pattern.charAt(j))
      j = lsp[j - 1]; // Fall back in the pattern
    if (text.charAt(i) == pattern.charAt(j)) {
      j++; // Next char matched, increment position
      if (j == pattern.length)
        return i - (j - 1);
    }
  }
  return -1; // Not found
}

console.log(kmpSearch('ays', 'haystack') != -1) // true
console.log(kmpSearch('asdf', 'haystack') != -1) // false


11
এটি ওভারকিল কিন্তু তবুও একটি আকর্ষণীয় উত্তর
ফয়সালু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.