Welcome to collectivesolver - Programming & Software Q&A with code examples. A website with trusted programming answers. All programs are tested and work.

Contact: aviboots(AT)netvision.net.il

Semrush - keyword research tool

Turn ChatGPT, Claude, Gemini, And CoPilot Into Your Personal Assistant, Business Coach, Content Creator, And More

AFFILIATE MARKETING Your all-in-one performance engine Manage affiliates, creators, and customer referrals in one unified platform—turning every partnership into measurable growth
Secure & Reliable Web Hosting, Free Domain, Free SSL, 1-Click WordPress Install, Expert 24/7 Support

Boost your online presence with premium web hosting and servers

Disclosure: My content contains affiliate links.

42,705 questions

55,464 answers

573 users

How to count the number of non-overlapping instances of a substring in a string in Node.js

3 Answers

0 votes
function countNonOverlappingOccurrences(str, substr) {
    if (substr === "") return 0;
  
    let count = 0;
    let offset = str.indexOf(substr);
  
    while (offset !== -1) {
        count++;
        offset = str.indexOf(substr, offset + substr.length);
    }
  
    return count;
}
  
const str = "go java phphp rust c pphpp c++ phpphp python php phphp";
  
console.log(countNonOverlappingOccurrences(str, "php"));
  
  
     
/*
run:
     
6
  
*/

 



answered Aug 24, 2024 by avibootz
edited Jul 17 by avibootz
0 votes
function countNonOverlappingOccurrences(str, substr) {
    return (str.length - str.replace(new RegExp(substr, "gi"), "").length) / substr.length;
}
  
const str = "go java phphp rust c pphpp c++ phpphp python php phphp";
  
console.log(countNonOverlappingOccurrences(str, "php"));
  
  
     
/*
run:
     
6
  
*/
  

 



answered Aug 24, 2024 by avibootz
edited Jul 17 by avibootz
0 votes
// Non‑overlapping occurrences are matches of a substring that do not reuse any of
// the same characters. Once one match is counted, the next search must begin
// after that match ends.

function count_non_overlapping(haystack, needle) {
    /*
       Count how many times 'needle' appears in 'haystack' without overlapping.
       The algorithm:
         • Use indexOf() to locate the next occurrence.
         • Each time a match is found, move the search index forward
           by the full length of the matched substring.
         • This ensures no characters are reused between matches.
    */

    let count = 0;
    let index = 0;  // current search position in the main string

    // Continue searching until indexOf() returns -1 (meaning: no more matches)
    while (true) {
        // Find the next occurrence starting at the current index
        const pos = haystack.indexOf(needle, index);

        if (pos === -1) {
            // No more matches found
            break;
        }

        // We found a match, so increment the count
        count++;

        // Move index forward by the length of the needle
        // This ensures the next search begins *after* the matched substring
        index = pos + needle.length;
    }

    return count;
}


// ---------------------------------------------------------------
const s = 'go java phphp rust c pphpp c++ phpphp python php phphp';
const substring = 'php';

// Count non-overlapping occurrences
const result = count_non_overlapping(s, substring);

console.log("Non-overlapping occurrences:", result);



/*
run:

Non-overlapping occurrences: 6

*/

 



answered Jul 17 by avibootz
edited Jul 18 by avibootz

Related questions

...