অন্য স্ট্রিংয়ে নির্দিষ্ট স্ট্রিংয়ের সংখ্যাটি আমি কীভাবে গণনা করব? উদাহরণস্বরূপ, আমি জাভাস্ক্রিপ্টে এটি করার চেষ্টা করছি:
var temp = "This is a string.";
alert(temp.count("is")); //should output '2'
অন্য স্ট্রিংয়ে নির্দিষ্ট স্ট্রিংয়ের সংখ্যাটি আমি কীভাবে গণনা করব? উদাহরণস্বরূপ, আমি জাভাস্ক্রিপ্টে এটি করার চেষ্টা করছি:
var temp = "This is a string.";
alert(temp.count("is")); //should output '2'
উত্তর:
g
রেগুলার এক্সপ্রেশন (জন্য সংক্ষেপে বিশ্বব্যাপী ) পুরো স্ট্রিং অনুসন্ধান করতে বদলে শুধুমাত্র প্রথম সংঘটন খুঁজে বলেছেন। এটি is
দু'বার মেলে :
var temp = "This is a string.";
var count = (temp.match(/is/g) || []).length;
console.log(count);
এবং, যদি কোনও মিল নেই, তবে এটি ফিরে আসে 0
:
var temp = "Hello World!";
var count = (temp.match(/is/g) || []).length;
console.log(count);
count = (str.match(/is/g) || []).length
ম্যাচ না থাকলে আমি পরিচালনা করতে গেলাম ।
RegExp
কন্সট্রাক্টরটি ব্যবহার করে এবং আপনি যে স্ট্রিংটি সন্ধান করছেন তা পাস করে গতিশীলভাবে রিজেক্সপ তৈরি করতে পারেন তবে সেক্ষেত্রে আপনাকে সমস্ত মেটাচ্যারাক্টরকে এড়িয়ে যেতে হবে। সেই দৃশ্যে, খাঁটি স্ট্রিং পদ্ধতির চেয়ে ভাল।
/** Function that count occurrences of a substring in a string;
* @param {String} string The string
* @param {String} subString The sub string to search for
* @param {Boolean} [allowOverlapping] Optional. (Default:false)
*
* @author Vitim.us https://gist.github.com/victornpb/7736865
* @see Unit Test https://jsfiddle.net/Victornpb/5axuh96u/
* @see http://stackoverflow.com/questions/4009756/how-to-count-string-occurrence-in-string/7924240#7924240
*/
function occurrences(string, subString, allowOverlapping) {
string += "";
subString += "";
if (subString.length <= 0) return (string.length + 1);
var n = 0,
pos = 0,
step = allowOverlapping ? 1 : subString.length;
while (true) {
pos = string.indexOf(subString, pos);
if (pos >= 0) {
++n;
pos += step;
} else break;
}
return n;
}
occurrences("foofoofoo", "bar"); //0
occurrences("foofoofoo", "foo"); //3
occurrences("foofoofoo", "foofoo"); //1
occurrences("foofoofoo", "foofoo", true); //2
মিলগুলি:
foofoofoo
1 `----´
2 `----´
সারকথাআমি একটি বেঞ্চমার্ক পরীক্ষা করেছি এবং আমার ফাংশনটি 10 গুণ বেশি দ্রুত হয় তবে গম্বোর দ্বারা পোস্ট করা রেজিএক্সএক্স ম্যাচ ফাংশন। আমার পরীক্ষার স্ট্রিংয়ের দৈর্ঘ্য 25 টি। 'ও' চরিত্রটির 2 টি উপস্থিতি রয়েছে। আমি সাফারিতে 1 000 000 বার মৃত্যুদন্ড কার্যকর করেছি।
সাফারি 5.1
বেঞ্চমার্ক> মোট সময় নির্বাহ: 5617 এমএস (রিজেক্সপ)
বেঞ্চমার্ক> মোট সময় নির্বাহ: 881 এমএস (আমার ফাংশন 6.4x দ্রুত)
ফায়ারফক্স 4
বেঞ্চমার্ক> মোট সময় নির্বাহ: 8547 এমএস (রেক্সেক্সপ)
বেঞ্চমার্ক> মোট সময় নির্বাহ: 634 এমএস (আমার ফাংশন 13.5x দ্রুত)
সম্পাদনা করুন: আমি পরিবর্তন করেছি
ক্যাশেড স্ট্রিংয়ের দৈর্ঘ্য
স্ট্রিং-এ টাইপ-কাস্টিং যুক্ত হয়েছে।
allowচ্ছিক 'অনুমতি ওভারল্যাপিং' পরামিতি যুক্ত করা হয়েছে
খালি সাবস্ট্রিং কেস জন্য সঠিক "" আউটপুট স্থির করা হয়েছে।
substring.length
প্রায় প্রতিটি লুপ পরীক্ষা করে while
occurrences(11,1) //2
এবং এটি এখনও কাজ করবে। (এটা দ্রুত পরিবর্তে ধরনের জন্য চেক করে কলিং এই ভাবে করছে toString () )
function countInstances(string, word) {
return string.split(word).length - 1;
}
countInstances("isisisisisis", "is") === 0
।
আপনি এটি চেষ্টা করতে পারেন:
var theString = "This is a string.";
console.log(theString.split("is").length - 1);
theString.split(myvar).length - 1
যা আপনি সাধারণ রেজেেক্সের সাথে ক্যান্ট করেন না
আমার সমাধান:
var temp = "This is a string.";
function countOcurrences(str, value) {
var regExp = new RegExp(value, "gi");
return (str.match(regExp) || []).length;
}
console.log(countOcurrences(temp, 'is'));
countOcurrences('Hello...','.')==8
এবং 3 নয়
আপনি match
যেমন ফাংশন সংজ্ঞায়িত করতে ব্যবহার করতে পারেন :
String.prototype.count = function(search) {
var m = this.match(new RegExp(search.toString().replace(/(?=[.\\+*?[^\]$(){}\|])/g, "\\"), "g"));
return m ? m.length:0;
}
return m ? m.length:-1;
।
নন-রেজেক্স সংস্করণ:
var string = 'This is a string',
searchFor = 'is',
count = 0,
pos = string.indexOf(searchFor);
while (pos > -1) {
++count;
pos = string.indexOf(searchFor, ++pos);
}
console.log(count); // 2
is
occurences
শুধু কোড-golfing রেবেকা Chernoff এর সমাধান :-)
alert(("This is a string.".match(/is/g) || []).length);
String.prototype.Count = function (find) {
return this.split(find).length - 1;
}
console.log("This is a string.".Count("is"));
এটি 2 ফিরে আসবে।
এখানে দ্রুততম ফাংশন!
কেন এটি দ্রুত?
সমস্ত ক্রিয়াকলাপ যেমন করা যায় ততগুলি সম্মিলিত, একাধিক ক্রিয়াকলাপের কারণে মন্দা এড়ানো
String.prototype.timesCharExist=function(c){var t=0,l=0,c=(c+'')[0];while(l=this.indexOf(c,l)+1)++t;return t};
এখানে একটি ধীর এবং আরও পাঠযোগ্য সংস্করণ:
String.prototype.timesCharExist = function ( chr ) {
var total = 0, last_location = 0, single_char = ( chr + '' )[0];
while( last_location = this.indexOf( single_char, last_location ) + 1 )
{
total = total + 1;
}
return total;
};
কাউন্টার, দীর্ঘ বর্ণের নাম এবং 1 টির অপব্যবহারের কারণে এটি এক ধীর।
এটি ব্যবহার করতে, আপনি কেবল এটি করুন:
'The char "a" only shows up twice'.timesCharExist('a');
সম্পাদনা করুন: (2013/12/16)
অপেরা 12.16 বা তার বেশি বয়সীদের সাথে ব্যবহার করবেন না! এটি রেগেক্স সমাধানের চেয়ে প্রায় 2.5x বেশি সময় নেবে!
ক্রোমে, এই দ্রবণটি ১,০০,০০০ অক্ষরের জন্য ১৪ মিমি এবং ২০ মিলিমিটারের মধ্যে নেবে।
রেজেক্স দ্রবণটি একই পরিমাণের জন্য 11-14 মিমি লাগে।
একটি ফাংশন ব্যবহার করে (বাইরে) String.prototype
) করতে 10-10ms লাগবে।
এখানে ব্যবহৃত কোডটি রয়েছে:
String.prototype.timesCharExist=function(c){var t=0,l=0,c=(c+'')[0];while(l=this.indexOf(c,l)+1)++t;return t};
var x=Array(100001).join('1234567890');
console.time('proto');x.timesCharExist('1');console.timeEnd('proto');
console.time('regex');x.match(/1/g).length;console.timeEnd('regex');
var timesCharExist=function(x,c){var t=0,l=0,c=(c+'')[0];while(l=x.indexOf(c,l)+1)++t;return t;};
console.time('func');timesCharExist(x,'1');console.timeEnd('func');
সমস্ত সমাধানের ফলাফল 100,000 হওয়া উচিত!
নোট: আপনি, পরিবর্তন এই ফাংশন তুলনায় আরো 1 গৃহস্থালির কাজ গণনা করতে চান কোথায় c=(c+'')[0]
মধ্যেc=c+''
var temp = "This is a string.";
console.log((temp.match(new RegExp("is", "g")) || []).length);
আমি মনে করি রেগেক্সের উদ্দেশ্যটি এর থেকে অনেক আলাদা indexOf
।
indexOf
রেগেক্সে আপনি ওয়াইল্ডকার্ড ব্যবহার করতে পারেন এমন কোনও নির্দিষ্ট স্ট্রিংয়ের উপস্থিতিটি সন্ধান করুন [A-Z]
যার অর্থ এটি আসল চরিত্রটি উল্লেখ না করে শব্দের মধ্যে যে কোনও মূলধন অক্ষর খুঁজে পেতে পারে ।
উদাহরণ:
var index = "This is a string".indexOf("is");
console.log(index);
var length = "This is a string".match(/[a-z]/g).length;
// where [a-z] is a regex wildcard expression thats why its slower
console.log(length);
সুপার ডুপার পুরানো, তবে আমার আজকের মতো কিছু করার দরকার ছিল এবং কেবলমাত্র পরে এসও পরীক্ষা করার জন্য ভাবা হয়েছিল। আমার জন্য বেশ দ্রুত কাজ করে।
String.prototype.count = function(substr,start,overlap) {
overlap = overlap || false;
start = start || 0;
var count = 0,
offset = overlap ? 1 : substr.length;
while((start = this.indexOf(substr, start) + offset) !== (offset - 1))
++count;
return count;
};
var myString = "This is a string.";
var foundAtPosition = 0;
var Count = 0;
while (foundAtPosition != -1)
{
foundAtPosition = myString.indexOf("is",foundAtPosition);
if (foundAtPosition != -1)
{
Count++;
foundAtPosition++;
}
}
document.write("There are " + Count + " occurrences of the word IS");
দেখুন: - স্ট্রিং- এ ধাপে ধাপে ব্যাখ্যার জন্য একটি স্ট্রিংং গণনা করুন ।
উপরে @ ভিটিম.ইস উত্তর উপর বিল্ডিং। আমি তার পদ্ধতিটি আমাকে দেওয়া নিয়ন্ত্রণটি পছন্দ করি, এটি প্রসারিত করা সহজ করে তোলে, তবে আমার কেস সংবেদনশীলতা যোগ করতে হবে এবং বিরামচিহ্নের সমর্থনে পুরো শব্দগুলিতে ম্যাচগুলি সীমাবদ্ধ করতে হবে। (যেমন "স্নান" "স্নান করুন" তে রয়েছে তবে "স্নান" নয়)
যতিচিহ্নটি রেগেক্স এসেছে: https://stackoverflow.com/a/25575009/497745 ( আমি কীভাবে জাভাস্ক্রিপ্টের স্ট্রিং থেকে রেগেক্স ব্যবহার করে সমস্ত বিরামচিহ্নগুলি কেটে ফেলতে পারি? )
function keywordOccurrences(string, subString, allowOverlapping, caseInsensitive, wholeWord)
{
string += "";
subString += "";
if (subString.length <= 0) return (string.length + 1); //deal with empty strings
if(caseInsensitive)
{
string = string.toLowerCase();
subString = subString.toLowerCase();
}
var n = 0,
pos = 0,
step = allowOverlapping ? 1 : subString.length,
stringLength = string.length,
subStringLength = subString.length;
while (true)
{
pos = string.indexOf(subString, pos);
if (pos >= 0)
{
var matchPos = pos;
pos += step; //slide forward the position pointer no matter what
if(wholeWord) //only whole word matches are desired
{
if(matchPos > 0) //if the string is not at the very beginning we need to check if the previous character is whitespace
{
if(!/[\s\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&\(\)*+,\-.\/:;<=>?@\[\]^_`{|}~]/.test(string[matchPos - 1])) //ignore punctuation
{
continue; //then this is not a match
}
}
var matchEnd = matchPos + subStringLength;
if(matchEnd < stringLength - 1)
{
if (!/[\s\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&\(\)*+,\-.\/:;<=>?@\[\]^_`{|}~]/.test(string[matchEnd])) //ignore punctuation
{
continue; //then this is not a match
}
}
}
++n;
} else break;
}
return n;
}
আপনি যদি বাগ বা উন্নতিগুলি খুঁজে পান তবে দয়া করে এই উত্তরটি সংশোধন ও পুনরায় সংশোধন করুন।
যে ভবিষ্যতে এই থ্রেড খুঁজে বের করে কারো জন্য, নোট গৃহীত উত্তর সবসময় সঠিক মান করবে না যদি আপনি এটি সর্বজনীন, যেহেতু এটি মত Regex অপারেটর শ্বাসরোধ হবে $
এবং .
। এখানে একটি ভাল সংস্করণ, যে কোনও সুই পরিচালনা করতে পারে :
function occurrences (haystack, needle) {
var _needle = needle
.replace(/\[/g, '\\[')
.replace(/\]/g, '\\]')
return (
haystack.match(new RegExp('[' + _needle + ']', 'g')) || []
).length
}
function get_occurrence(varS,string){//Find All Occurrences
c=(string.split(varS).length - 1);
return c;
}
temp="This is a string.";
console.log("Total Occurrence is "+get_occurrence("is",temp));
স্ট্রিংয়ে উভয় অক্ষর এবং স্ট্রিংয়ের উপস্থিতি খুঁজে পেতে get_occurrence (varS, স্ট্রিং) ব্যবহার করুন।
চেষ্টা করে দেখুন
<?php
$str = "33,33,56,89,56,56";
echo substr_count($str, '56');
?>
<script type="text/javascript">
var temp = "33,33,56,89,56,56";
var count = temp.match(/56/g);
alert(count.length);
</script>
রেগেক্স ছাড়াই সহজ সংস্করণ:
var temp = "This is a string.";
var count = (temp.split('is').length - 1);
alert(count);
এটা চেষ্টা কর
let allData = "This is a string.";
let searchString = 'is';
let regularExp = new RegExp(searchString, 'g');
let occurArray = allData.match(regularExp);
let count = (occurArray || []).length;
alert(count);
ফিডল লিংক: https://jsfiddle.net/rajaramtt/gn0dtsjc/1/
এখন এটি একটি খুব পুরানো থ্রেড যা আমি পেরিয়ে এসেছি কিন্তু অনেকেই তাদের উত্তরটির দিকে ঠেলে দিয়েছে, এই সাধারণ কোডটি দিয়ে কাউকে সহায়তা করার প্রত্যাশায় আমার এখানে।
var search_value = "This is a dummy sentence!";
var letter = 'a'; /*Can take any letter, have put in a var if anyone wants to use this variable dynamically*/
letter = letter && "string" === typeof letter ? letter : "";
var count;
for (var i = count = 0; i < search_value.length; count += (search_value[i++] == letter));
console.log(count);
আমি নিশ্চিত নই যে এটি দ্রুততম সমাধান কিনা তবে আমি এটিকে সরলতার জন্য এবং রেজেক্স ব্যবহার না করার জন্য পছন্দ করেছি (আমি কেবল তাদের ব্যবহার পছন্দ করি না!)
এই ফাংশনটি পাঠ্যে কোনও শব্দের সংঘটনগুলির সংখ্যা প্রদান করে।
নোট এবং শব্দের পাঠ্যটির বিন্যাস (মূলধন, বড় হাতের ...) যাই হোক না কেন ঘটনার সংখ্যা গণনা করার জন্য আমরা লাওয়ারকেসে টু ব্যবহার করি
wordCount(text, word) {
if (!text || !word) {
return 0;
}
text = text.toLowerCase();
word = word.toLowerCase();
return ( text.split( word ).length - 1 );
}
লেয়ানড্রো বাটিস্তার জন্য উত্তর: কেবলমাত্র রেগেক্স এক্সপ্রেশন নিয়ে সমস্যা।
"use strict";
var dataFromDB = "testal";
$('input[name="tbInput"]').on("change",function(){
var charToTest = $(this).val();
var howManyChars = charToTest.length;
var nrMatches = 0;
if(howManyChars !== 0){
charToTest = charToTest.charAt(0);
var regexp = new RegExp(charToTest,'gi');
var arrMatches = dataFromDB.match(regexp);
nrMatches = arrMatches ? arrMatches.length : 0;
}
$('#result').html(nrMatches.toString());
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="main">
What do you wanna count <input type="text" name="tbInput" value=""><br />
Number of occurences = <span id="result">0</span>
</div>
var countInstances = function(body, target) {
var globalcounter = 0;
var concatstring = '';
for(var i=0,j=target.length;i<body.length;i++){
concatstring = body.substring(i-1,j);
if(concatstring === target){
globalcounter += 1;
concatstring = '';
}
}
return globalcounter;
};
console.log( countInstances('abcabc', 'abc') ); // ==> 2
console.log( countInstances('ababa', 'aba') ); // ==> 2
console.log( countInstances('aaabbb', 'ab') ); // ==> 1
কিছুটা দেরি করেও, ধরে নেওয়া আমাদের নীচের স্ট্রিং রয়েছে:
var temp = "This is a string.";
প্রথমে আমরা যা কিছু মিলিয়ে দেখতে চাইছি তাতে বিভক্ত হয়ে যাব, এটি স্ট্রিংগুলির একটি অ্যারে ফিরিয়ে দেবে।
var array = temp.split("is");
তারপরে আমরা এর দৈর্ঘ্য পাই এবং এটির 1 টি বিয়োগ করায় যেহেতু বিভক্ত ডিফল্ট 1 মাপের অ্যারেরে বিভক্ত হয় এবং ফলস্বরূপ প্রতিবার যখন কোনও ঘটনা খুঁজে পাওয়া যায় তখন এর আকারটি বাড়িয়ে তোলে।
var occurrenceCount = array.length - 1;
alert(occurrenceCount); //should output '2'
আপনি নীচের মত এক লাইনে এই সব করতে পারেন:
alert("This is a string.".split("is").length - 1); //should output '2'
আশা করি এটি সাহায্য করবে: ডি
এই সমাধানটি সেই .replace()
পদ্ধতির উপর ভিত্তি করে যা একটি রেজিএক্সকে প্রথম প্যারামিটার হিসাবে গ্রহণ করে এবং দ্বিতীয় পরামিতি হিসাবে কোনও ফাংশন যা আমরা কাউন্টারকে বাড়ানোর জন্য ক্লোজার হিসাবে ব্যবহার করতে পারি ...
/**
* Return the frequency of a substring in a string
* @param {string} string - The string.
* @param {string} string - The substring to count.
* @returns {number} number - The frequency.
*
* @author Drozerah https://gist.github.com/Drozerah/2b8e08d28413d66c3e63d7fce80994ce
* @see https://stackoverflow.com/a/55670859/9370788
*/
const subStringCounter = (string, subString) => {
let count = 0
string.replace(new RegExp(subString, 'gi'), () => count++)
return count
}
ব্যবহার
subStringCounter("foofoofoo", "bar"); //0
subStringCounter("foofoofoo", "foo"); //3
let str = 'As sly as a fox, as strong as an ox';
let target = 'as'; // let's look for it
let pos = 0;
while (true) {
let foundPos = str.indexOf(target, pos);
if (foundPos == -1) break;
alert( `Found at ${foundPos}` );
pos = foundPos + 1; // continue the search from the next position
}
একই অ্যালগরিদম আরও ছোট করা যায়:
let str = "As sly as a fox, as strong as an ox";
let target = "as";
let pos = -1;
while ((pos = str.indexOf(target, pos + 1)) != -1) {
alert( pos );
}
substr_count
পিএইচপি থেকে জাভাস্ক্রিপ্ট অনুবাদ
function substr_count (haystack, needle, offset, length) {
// eslint-disable-line camelcase
// discuss at: https://locutus.io/php/substr_count/
// original by: Kevin van Zonneveld (https://kvz.io)
// bugfixed by: Onno Marsman (https://twitter.com/onnomarsman)
// improved by: Brett Zamir (https://brett-zamir.me)
// improved by: Thomas
// example 1: substr_count('Kevin van Zonneveld', 'e')
// returns 1: 3
// example 2: substr_count('Kevin van Zonneveld', 'K', 1)
// returns 2: 0
// example 3: substr_count('Kevin van Zonneveld', 'Z', 0, 10)
// returns 3: false
var cnt = 0
haystack += ''
needle += ''
if (isNaN(offset)) {
offset = 0
}
if (isNaN(length)) {
length = 0
}
if (needle.length === 0) {
return false
}
offset--
while ((offset = haystack.indexOf(needle, offset + 1)) !== -1) {
if (length > 0 && (offset + needle.length) > length) {
return false
}
cnt++
}
return cnt
}
লোকটাসের অনুবাদ পিএইচপি-র সাবস্ট্র_কাউন্ট ফাংশনটি দেখুন
এটা চেষ্টা কর:
function countString(str, search){
var count=0;
var index=str.indexOf(search);
while(index!=-1){
count++;
index=str.indexOf(search,index+1);
}
return count;
}