javascript - কিভাবে একটি স্ট্রিং জাভাস্ক্রিপ্ট একটি পদার্থবিশেষ রয়েছে কিনা তা পরীক্ষা করবেন?
string substring (20)
String.prototype.indexOf()
অথবা String.prototype.search()
?
যেমনটি ইতিমধ্যে উল্লেখ করা হয়েছে, জাভাস্ক্রিপ্ট স্ট্রিংগুলির একটি String.prototype.indexOf ও search
পদ্ধতি উভয়ই আছে।
উভয়ের মধ্যে কী পার্থক্য হল, indexOf
শুধুমাত্র প্লেইন সাবস্ট্রিংয়ের জন্য, যখন search
নিয়মিত এক্সপ্রেশনগুলিকে সমর্থন করে। অবশ্যই, indexOf
ব্যবহার করে একটি indexOf
এটা দ্রুত।
জাভাস্ক্রিপ্টে দেখুন, indexOf () এবং অনুসন্ধান () এর মধ্যে পার্থক্য কি? ।
আপনার নিজস্ব String.prototype.contains()
পদ্ধতি বাস্তবায়ন
আপনি যদি নিজের স্ট্রিংয়ে নিজের স্ট্রিংটি যুক্ত করতে চান তবে এটি করার সর্বোত্তম এর পদ্ধতি হতে হবে:
if (!String.prototype.contains) {
String.prototype.contains = function (arg) {
return !!~this.indexOf(arg);
};
}
আপনি এটি ভালো ব্যবহার করবেন:
'Hello World'.contains('orl');
একটি কাস্টম ইউটিলিটি লাইব্রেরি বাস্তবায়ন
জাভাস্ক্রিপ্টে স্ট্যান্ডার্ড অবজেক্টগুলিতে নিজের নিজস্ব কাস্টম পদ্ধতি যুক্ত করার জন্য এটি সাধারণত frowned হয়, উদাহরণস্বরূপ, কারণ এটি সামঞ্জস্যের অগ্রসর হতে পারে।
আপনি যদি সত্যিই আপনার নিজস্ব পদ্ধতি এবং / অথবা অন্য কাস্টম স্ট্রিং পদ্ধতিগুলি চান তবে আপনার নিজের ইউটিলিটি লাইব্রেরি তৈরি করা এবং সেই লাইব্রেরিতে আপনার কাস্টম স্ট্রিং পদ্ধতিগুলি যোগ করা আরও ভাল।
var helper = {};
helper.string = {
contains : function (haystack, needle) {
return !!~haystack.indexOf(needle);
},
...
};
আপনি এটি ভালো ব্যবহার করবেন:
helper.string.contains('Hello World', 'orl');
একটি তৃতীয় পক্ষের ইউটিলিটি লাইব্রেরি ব্যবহার করে
আপনি যদি নিজের কাস্টম সহায়ক লাইব্রেরি তৈরি করতে না চান তবে অবশ্যই - তৃতীয় পক্ষের ইউটিলিটি লাইব্রেরি ব্যবহার করার বিকল্প সর্বদা আছে। @ Lodash দ্বারা উল্লেখ করা , Lodash এবং Underscore.js সবচেয়ে জনপ্রিয়।
লোডশে, আপনি _.includes()
ব্যবহার করতে পারেন, যা আপনি _.includes()
ব্যবহার করেন:
_.includes('Hello World', 'orl');
_.str.include()
, আপনি _.str.include()
ব্যবহার করতে পারেন, যা আপনি এটি ব্যবহার করেন:
_.str.include('Hello World', 'orl');
সাধারণত আমি একটি String.contains()
পদ্ধতি আশা করি, কিন্তু এক হতে বলে মনে হচ্ছে না।
এই জন্য চেক করার একটি যুক্তিসঙ্গত উপায় কি?
ES6 String.prototype.includes
রয়েছে।
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes
আপনি .indexOf
String.prototype.indexOf খুঁজছেন।
indexOf
substring একটি সূচক ফিরে যাচ্ছে। পদার্থ সূত্রপাত শুরু হবে যেখানে সূচক। কোন মিল নেই, একটি -1 ফিরে। এখানে সেই ধারণার একটি সহজ ডেমো রয়েছে:
var str = "Hello World"; // For example, lets search this string,
var term = "World"; // for the term "World",
var index = str.indexOf(term); // and get its index.
if (index != -1) { // If the index is not -1 then the term was matched in the string,
alert(index); // and we can do some work based on that logic. (6 is alerted)
}
আপনি jQuery এর ব্যবহার করতে পারেন :contains
নির্বাচক :contains
।
$("div:contains('John')")
এখানে এটি পরীক্ষা করুন: contains-selector
আপনি জাভাস্ক্রিপ্ট search()
পদ্ধতি ব্যবহার করতে পারেন।
সিনট্যাক্স হল: string.search(regexp)
এটি কোনও মিল পাওয়া গেলে ম্যাচটির অবস্থান, বা -1।
এখানে উদাহরণ দেখুন: jsref_search
আপনি একটি জটিল নিয়মিত অভিব্যক্তি সিনট্যাক্স প্রয়োজন হয় না। আপনি তাদের সাথে পরিচিত না হলে একটি সহজ st.search("title")
করতে হবে। আপনি যদি আপনার পরীক্ষার ক্ষেত্রে st.search(/title/i)
হতে চান তবে আপনাকে st.search(/title/i)
।
আপনি সহজেই এই বিবৃতি সহ স্ট্রিংয়ের জন্য একটি contains
পদ্ধতি যুক্ত করতে পারেন:
String.prototype.contains = function(it) { return this.indexOf(it) != -1; };
দ্রষ্টব্য: এই ব্যবহার না করার জন্য একটি বৈধ যুক্তি জন্য নীচের মন্তব্য দেখুন। আমার পরামর্শ: আপনার নিজের রায় ব্যবহার করুন।
বিকল্পভাবে:
if (typeof String.prototype.contains === 'undefined') { String.prototype.contains = function(it) { return this.indexOf(it) != -1; }; }
উল্লেখিত হিসাবে আপনি একটি রাজধানী "ও" সঙ্গে indexOf কল করতে হবে। এটি উল্লেখ করা উচিত যে, জাভাস্ক্রিপ্ট শ্রেণিতে একটি সংরক্ষিত শব্দ, আপনাকে এই ডাটা বৈশিষ্ট্যটি পেতে ক্লাসName ব্যবহার করতে হবে। সম্ভবত এটি ব্যর্থ হওয়ার কারণ এটি একটি নিল মান প্রদান করছে। আপনি আপনার বর্গ মান পেতে নিম্নলিখিত কাজ করতে পারেন ...
var test = elm.getAttribute("className");
//or
var test = elm.className
এই শুধু আমার জন্য কাজ। এটি এমন স্ট্রিংগুলির জন্য নির্বাচন করে যা "মুছে ফেলা হয়েছে" শব্দটি ধারণ করে না।
if (eventString.indexOf("Deleted:") == -1)
এখানে বর্তমান সম্ভাবনার একটি তালিকা রয়েছে:
1. (ES6) includes
- উত্তর দিতে যান
var string = "foo",
substring = "oo";
string.includes(substring);
2. ES5 এবং পুরোনো indexOf
var string = "foo",
substring = "oo";
string.indexOf(substring) !== -1;
String.prototype.indexOf
অন্যান্য স্ট্রিং স্ট্রিং অবস্থান ফিরে। যদি না পাওয়া যায়, এটা -1
ফিরে আসবে।
3. search
- উত্তর দিতে যান
var string = "foo",
expr = /oo/;
string.search(expr);
4. lodash অন্তর্ভুক্ত - উত্তর দিতে যান
var string = "foo",
substring = "oo";
_.includes(string, substring);
5. RegExp - উত্তর দিতে যান
var string = "foo",
expr = /oo/; // no quotes here
expr.test(string);
6. ম্যাচ - উত্তর দিতে যান
var string = "foo",
expr = /oo/;
string.match(expr);
পারফরম্যান্স পরীক্ষাগুলি দেখাচ্ছে যে indexOf
সর্বোত্তম পছন্দ হতে পারে, যদি এটি এমন একটি বিন্দুতে আসে যেখানে গতি সম্পর্কিত বিষয় রয়েছে।
এটি করার আরেকটি বিকল্প হল:
আপনি ম্যাচ ফাংশন ব্যবহার করতে পারেন, যা কিছু ভালো:
x = "teststring";
if (x.match("test")) {
// Code
}
ম্যাচ () নিয়মিত অভিব্যক্তি সহ কাজ করতে পারে:
x = "teststring";
if (x.match(/test/i)) {
// Code
}
ওয়েবে এবং এখানে পাওয়া কোড স্নিপেট ব্যবহার করার পরিবর্তে, আপনি একটি ভাল-পরীক্ষিত এবং নথিভুক্ত লাইব্রেরি ব্যবহার করতে পারেন। দুটি বিকল্প আমি সুপারিশ করবে:
প্রথম বিকল্প: Lodash ব্যবহার করুন: এতে একটি পদ্ধতি includes
:
_.includes('foobar', 'ob');
// → true
লোড্যাশ এনপিএম এর জন্য সবচেয়ে জনপ্রিয় জাভাস্ক্রিপ্ট লাইব্রেরি নির্ভরতা এবং সহজে জাভাস্ক্রিপ্ট ইউটিলিটি পদ্ধতির লোড রয়েছে। তাই অনেক প্রকল্পের জন্য আপনি এই যাই হোক না কেন চাই ;-)
দ্বিতীয় বিকল্প: অথবা Underscore.string ব্যবহার করুন: এটি একটি include
পদ্ধতি আছে:
_.str.include('foobar', 'ob');
// → true
এখানে আন্ডারস্কোর.স্ট্রিংয়ের বিবরণ রয়েছে, এটি কেবল 9 কেবি যোগ করে তবে এটি আপনাকে সমস্ত সুবিধাদি দেয় যা একটি ভাল-পরীক্ষিত এবং নথিবদ্ধ লাইব্রেরি অনুলিপি কোড স্ন্যিপেটগুলিতে আছে:
Underscore.string স্ট্রিং সহ আরামদায়ক ম্যানিপুলেশনের জন্য জাভাস্ক্রিপ্ট লাইব্রেরি, প্রোটোটাইপ.জেএস, রাইট.জেএস, আন্ডারস্কোর এবং সুন্দর রুবি ভাষা দ্বারা অনুপ্রাণিত Underscore.js এর জন্য এক্সটেনশান।
Underscore.string আপনাকে অনেকগুলি কার্যকর ফাংশন সরবরাহ করে: মূলধন, পরিষ্কার, অন্তর্ভুক্ত, গণনা, পাল্টা HTML, unescapeHTML, সন্নিবেশ, splice, শুরু, সহ, শেষ, শিরোনাম, শিরোনাম, ছিনতাই এবং ইত্যাদি।
ভাল মনে রাখবেন, Underscore.string আন্ডারস্কোর.জেএস দ্বারা প্রভাবিত কিন্তু এটি ছাড়া ব্যবহার করা যেতে পারে।
শেষ না অন্তত: জাভাস্ক্রিপ্ট সংস্করণ ES6 আসে একটি অন্তর্নির্মিত পদ্ধতি includes
:
'foobar'.includes('ob');
// → true
বেশিরভাগ আধুনিক ব্রাউজার ইতিমধ্যে এটি সমর্থন করে, ES6 সামঞ্জস্যপূর্ণ টেবিলে নজর রাখুন।
কিছু বৈধ সমাধান সংগ্রহ করার জন্য:
var stringVariable = "some text";
var findString = "text";
//using `indexOf()`
var containResult1 = stringVariable.indexOf(findString) != -1;
document.write(containResult1+', ');
//using `lastIndexOf()`
var containResult2 = stringVariable.lastIndexOf(findString) != -1;
document.write(containResult2+', ');
//using `search()`
var containResult3 = stringVariable.search(findString) != -1;
document.write(containResult3+', ');
//using `split()`
var containResult4 = stringVariable.split(findString)[0] != stringVariable;
document.write(containResult4+'');
জাভাস্ক্রিপ্ট কোড একটি অ্যারের মধ্যে উপস্থিত contains
ব্যবহার পদ্ধতি:
<html>
<head>
<h2>Use of contains() method</h2>
<script>
Array.prototype.contains = function (element) {
for (var i = 0; i < this.length; i++) {
if (this[i] == element) {
return true;
}
}
return false;
}
arr1 = ["Rose", "India", "Technologies"];
document.write("The condition is "+arr1.contains("India")+"<br>");
</script>
</head>
<b>[If the specified element is present in the array, it returns true otherwise
returns false.]</b>
</html>
প্রদত্ত কোডে উপস্থিত পদ্ধতিটি নির্ধারণ করে যে নির্দিষ্ট উপাদান অ্যারে উপস্থিত contains
কিনা। নির্দিষ্ট উপাদান অ্যারের উপস্থিত থাকলে, এটি সত্য ফেরত দেয়, না হলে এটি মিথ্যা প্রদান করে।
যেহেতু প্রশ্নটি বেশ জনপ্রিয়, তাই আমি মনে করি আমি কোডটিতে একটু আধুনিক গন্ধ যুক্ত করতে পারি।
// const : creates an immutable constant
const allLinks = document.getElementsByTagName("a");
// [].reduce.call : gives access to the reduce method on a HTMLCollection
// () => {} : ES6 arrow function
const foundLinks = [].reduce.call(allLinks, (sum, link) => {
// bitwise OR : converts the boolean value to a number
return sum + (link.classList.contains("title") | 0);
}, 0);
// template literal
console.log(`Found ${foundLinks || "no"} title class`);
BTW, সঠিক উত্তরটি ভুল বানান indexOf
বা অ-মানক স্ট্রিং. String.contains
। একটি বহিরাগত লাইব্রেরি লোড হচ্ছে (বিশেষ করে যদি কোডটি বিশুদ্ধ জাভাস্ক্রিপ্টে লেখা থাকে) অথবা String.prototype
সাথে String.prototype
বা নিয়মিত অভিব্যক্তি ব্যবহার করে একটু বেশি String.prototype
হয়।
সহজ কাজকর্ম
if (!String.prototype.contains) {
String.prototype.contains= function() {
return String.prototype.indexOf.apply(this, arguments) !== -1;
};
}
আপনি নিম্নলিখিত ভাবে ব্যবহার করতে পারেন
"hello".contains("he") // true
"hello world".contains("lo w")//true
"hello world".contains("lo wa")//false
"hello world".contains(" ")//true
"hello world".contains(" ")//false
স্ট্রিংয়ে অন্তর্মুখী এবং সর্বাধিক একটি match()
করুন। আপনি যা খুঁজছেন তা অর্জন করতে এই কাজ করুন:
var stringData ="anyString Data";
var subStringToSearch = "any";
// This will give back the substring if matches and if not returns null
var doesContains = stringData.match(subStringToSearch);
if(doesContains !=null) {
alert("Contains Substring");
}
ES6 এ একটি string.includes
আছে।
"potato".includes("to");
> true
মনে রাখবেন আপনাকে es6-shim
বা পুরোনো ব্রাউজারগুলিতে কাজ করার জন্য es6-shim
মতো লোড করতে হবে।
require('es6-shim')
ES5 মধ্যে
var s = "foo";
alert(s.indexOf("oo") > -1);
ES6 এ তিনটি নতুন পদ্ধতি includes()
: includes()
, শুরু startsWith()
, শেষ endsWith()
।
var msg = "Hello world!";
console.log(msg.startsWith("Hello")); // true
console.log(msg.endsWith("!")); // true
console.log(msg.includes("o")); // true
console.log(msg.startsWith("o", 4)); // true
console.log(msg.endsWith("o", 8)); // true
console.log(msg.includes("o", 8)); // false
জাভাস্ক্রিপ্ট
var str = "My big string contain apples and oranges";
var n = str.indexOf("apples");
alert(n); //will alert 22, -1 if not found
jQuery এর
<p>My big string contain apples and oranges</p>
alert($("p:contains(apples)")[0] != undefined); //will alert true if found
জাভাস্ক্রিপ্টে একটি contains
পদ্ধতি লিখার একটি সাধারণ উপায় হল:
if (!String.prototype.contains) {
String.prototype.contains = function (arg) {
return !!~this.indexOf(arg);
};
}
Bitwise নেগ্রেশন অপারেটর ( ~
) -1-0 (মিথ্যা) চালু করতে ব্যবহৃত হয় এবং অন্যান্য সমস্ত মান অ-শূন্য (সত্য) হবে।
ডাবল বুলিয়ান নেগশন অপারেটরগুলি বুলিয়ানের সংখ্যাটি নিক্ষেপ করতে ব্যবহার করা হয়।