Làm thế nào để đếm sự xuất hiện chuỗi trong chuỗi?


609

Làm thế nào tôi có thể đếm số lần một chuỗi cụ thể xảy ra trong một chuỗi khác. Ví dụ: đây là những gì tôi đang cố gắng thực hiện trong Javascript:

var temp = "This is a string.";
alert(temp.count("is")); //should output '2'

19
Nó phụ thuộc vào việc bạn có chấp nhận các trường hợp chồng lấp hay không , ví dụ var t = "sss"; Có bao nhiêu trường hợp của chuỗi con "ss" trong chuỗi trên? 1 hoặc 2? Bạn có nhảy qua từng trường hợp, hoặc di chuyển con trỏ theo từng ký tự, tìm kiếm chuỗi con?
Tim

4
Một điểm chuẩn được cải thiện cho câu trả lời của câu hỏi này: jsperf.com/opes-ocurrence-split-vs-match/2 (dựa trên điểm chuẩn của Kazzkiq).
idmean

Câu trả lời:


1029

Các gtrong biểu thức chính quy (viết tắt của toàn cầu ) cho biết để tìm kiếm trên toàn bộ chuỗi thay vì chỉ tìm thấy sự xuất hiện đầu tiên. Điều này khớp ishai lần:

var temp = "This is a string.";
var count = (temp.match(/is/g) || []).length;
console.log(count);

Và, nếu không có kết quả khớp, nó sẽ trả về 0:

var temp = "Hello World!";
var count = (temp.match(/is/g) || []).length;
console.log(count);


3
hiện đại và thanh lịch, nhưng giải pháp của Vitimtk hiệu quả hơn nhiều. Bạn nghĩ gì về mã của anh ấy?
TruMan1

5
Điều này trả lời câu hỏi tốt nhất. Nếu ai đó hỏi "Làm thế nào tôi có thể làm điều này nhanh hơn gấp 10 lần trong trường hợp đặc biệt (không có regexps)" thì Vitimtk sẽ thắng câu hỏi đó.
Dzhaughn

121
Cảm ơn vì điều này .. Tôi đã count = (str.match(/is/g) || []).lengthxử lý nếu bạn không có trận đấu.
Matt

6
Tôi không nghĩ câu trả lời này khớp chính xác với câu hỏi, vì nó không lấy một chuỗi làm đối số để khớp, như trường hợp sử dụng mô tả. Chắc chắn, bạn có thể tạo động regrec bằng cách sử dụng hàm RegExptạo và truyền chuỗi bạn đang tìm, nhưng trong trường hợp đó bạn phải thoát tất cả các siêu ký tự. Trong kịch bản đó, một cách tiếp cận chuỗi thuần túy là thích hợp hơn.
ZER0

3
Câu trả lời của Matt nên có trong câu trả lời!
Senči

240
/** 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;
}

Sử dụng

occurrences("foofoofoo", "bar"); //0

occurrences("foofoofoo", "foo"); //3

occurrences("foofoofoo", "foofoo"); //1

allowOverlaps

occurrences("foofoofoo", "foofoo", true); //2

Diêm:

  foofoofoo
1 `----´
2    `----´

Kiểm tra đơn vị

Điểm chuẩn

Tôi đã thực hiện một bài kiểm tra điểm chuẩn và chức năng của tôi nhanh hơn 10 lần so với chức năng so khớp regrec được đăng bởi gumbo. Trong chuỗi thử nghiệm của tôi là 25 ký tự dài. với 2 lần xuất hiện của nhân vật 'o'. Tôi đã thực hiện 1 000 000 lần trong Safari.

Safari 5.1

Điểm chuẩn> Tổng thời gian thực hiện: 5617 ms (regrec)

Điểm chuẩn> Tổng thời gian thực hiện: 881 ms (chức năng của tôi nhanh hơn 6,4 lần)

Firefox 4

Điểm chuẩn> Tổng thời gian thực hiện: 8547 ms (Rexapi)

Điểm chuẩn> Tổng thời gian thực hiện: 634 ms (chức năng của tôi nhanh hơn 13,5 lần)


Chỉnh sửa: những thay đổi tôi đã thực hiện

  • chiều dài chuỗi con được lưu trữ

  • thêm kiểu đúc vào chuỗi.

  • đã thêm tham số 'allowOverlicking' tùy chọn

  • đã sửa lỗi đầu ra chính xác cho "" trường hợp chuỗi con trống.

Ý chính

5
Tôi đã lặp lại thử nghiệm này trong Safari 5 và nhận được kết quả tương tự với một chuỗi nhỏ (100b), nhưng với chuỗi lớn hơn (16kb), regex chạy nhanh hơn đối với tôi. Đối với một lần lặp (không phải 1.000.000), sự khác biệt ít hơn một phần nghìn giây, vì vậy phiếu bầu của tôi chuyển sang biểu thức chính quy.
arlomedia

2
+1, nhưng bạn đang kiểm tra substring.lengthtrên hầu hết các vòng lặp, bạn nên xem xét bộ nhớ đệm bên ngoàiwhile
ajax333221

1
@ ajax333221 OMG bạn đọc được suy nghĩ của tôi, tôi đã thực hiện cải tiến này vài ngày trước và tôi sẽ chỉnh sửa câu trả lời của mình jsperf.com/count-opes-occurrence-in-opes
Vitim.us

4
Tôi đã tìm thấy mã của bạn được sử dụng ở đây: thành công-equation.com/mind_reader.html . Thực sự tốt đẹp các lập trình viên tâm trí đặt một tài liệu tham khảo ở đó.
Bruno Kim

3
@DanielZuzevich nó sẽ ép các kiểu thành Chuỗi , trong trường hợp bạn làm occurrences(11,1) //2và nó vẫn hoạt động. (Làm theo cách này nhanh hơn thay vì kiểm tra các loại và gọi
tớiString

112
function countInstances(string, word) {
   return string.split(word).length - 1;
}

4
Đây là một cách tiếp cận không an toàn / không chính xác, ví dụ : countInstances("isisisisisis", "is") === 0.
Nick Craver

5
@Antal - Trông giống như một lỗi trong bản dựng beta trước đây của chrome, hoạt động sau khi cập nhật lên bản mới nhất, mặc dù vậy tôi vẫn tránh xa phương pháp này.
Nick Craver

28
Đây có vẻ là một giải pháp hoàn toàn hợp lệ với tôi.
Gregor Schmidt

2
@NickCraver vì tò mò, tại sao bạn muốn tránh xa phương pháp này? (trừ lỗi trong trình duyệt beta của bạn)
Jonny Lin

6
@JonnyLin nó tạo ra các phân bổ không cần thiết, bạn ngay lập tức vứt bỏ khi các lựa chọn thay thế không - có khả năng rất lớn tùy thuộc vào dữ liệu.
Nick Craver

88

Bạn có thể thử điều này:

var theString = "This is a string.";
console.log(theString.split("is").length - 1);


14
+1 vì đơn giản và vì theo thử nghiệm của tôi , giải pháp này chạy nhanh hơn ~ 10 lần so với các thử nghiệm khác!
Claudio Holanda

Ví dụ tôi có hai "là" làm thế nào để bạn có được vị trí của mỗi?
quickoodle

Như đã thảo luận trong câu trả lời của @Orbit, mọi người đang nhận được kết quả khác nhau trên các phiên bản Chrome cũ hơn. Tôi có lẽ sẽ thận trọng một chút khi sử dụng phương pháp này.
mgthomas99

Và bạn cũng có thể sử dụng nó với các biến: theString.split(myvar).length - 1mà bạn không thể với regex đơn giản
Steffan

4
Đây là câu trả lời của @Orbit ba năm sau ...
aloisdg chuyển sang codidact.com

33

Giải pháp của tôi:

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


5
có lẽ sẽ tốt hơn khi trả về (str.match (regExp) || []). length; Bằng cách đó, bạn không đánh giá biểu thức chính quy hai lần?
aikeru

2
bạn cũng cần phải xâu chuỗi của mình hoặc countOcurrences('Hello...','.')==8không 3
Vitim.us

19

Bạn có thể sử dụng matchđể xác định chức năng đó:

String.prototype.count = function(search) {
    var m = this.match(new RegExp(search.toString().replace(/(?=[.\\+*?[^\]$(){}\|])/g, "\\"), "g"));
    return m ? m.length:0;
}

1
Nếu bạn muốn nó đồng nhất với ngữ nghĩa tìm kiếm của JS, dòng trả về sẽ là return m ? m.length:-1;.
Conor O'Brien

Điều này tốt hơn các giải pháp regex khác ở trên, vì chúng gây ra lỗi nếu chuỗi để tính các lần xuất hiện là "[" hoặc bất cứ điều gì có ý nghĩa đặc biệt trong Regex.
lập trình

11

Phiên bản không regex:

 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


1. Nó chỉ dành cho tìm kiếm char duy nhất, quá tinh tế 2. thậm chí OP yêu cầu issự xuất hiện
vladkras

1
Đây có lẽ là cách triển khai nhanh nhất ở đây, nhưng sẽ còn nhanh hơn nữa nếu bạn thay thế "++ pos" bằng "pos + = searchFor.length"
hanshenrik



8

Đây là chức năng nhanh nhất!

Tại sao nó nhanh hơn?

  • Không kiểm tra char bằng char (với 1 ngoại lệ)
  • Sử dụng một lúc và tăng 1 var (số đếm char) so với vòng lặp for kiểm tra độ dài và tăng 2 vars (thường là var i và var với số char)
  • Sử dụng CÁCH ít vars
  • Không sử dụng regex!
  • Sử dụng một chức năng (hy vọng) được tối ưu hóa cao
  • Tất cả các hoạt động được kết hợp như có thể, tránh bị chậm lại do nhiều hoạt động

    String.prototype.timesCharExist=function(c){var t=0,l=0,c=(c+'')[0];while(l=this.indexOf(c,l)+1)++t;return t};

Đây là một phiên bản chậm hơn và dễ đọc hơn:

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

Cái này chậm hơn vì bộ đếm, tên var dài và sử dụng sai 1 var.

Để sử dụng nó, bạn chỉ cần làm điều này:

    'The char "a" only shows up twice'.timesCharExist('a');

Chỉnh sửa: (2013/12/16)

KHÔNG sử dụng với Opera 12.16 trở lên! nó sẽ mất gần 2,5 lần so với giải pháp regex!

Trên chrome, giải pháp này sẽ mất từ ​​14ms đến 20ms cho 1.000.000 ký tự.

Giải pháp regex mất 11-14ms cho cùng một lượng.

Sử dụng một chức năng (bên ngoài String.prototype) sẽ mất khoảng 10-13ms.

Đây là mã được sử dụng:

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

Kết quả của tất cả các giải pháp nên là 100.000!

Lưu ý: nếu bạn muốn chức năng này đếm nhiều hơn 1 char, hãy thay đổi vị trí c=(c+'')[0]thànhc=c+''


1
nguyên mẫu là một ví dụ! Bạn có thể sử dụng chức năng như bạn muốn! Bạn thậm chí có thể làm điều này: var timesFunctionExist = function (x, c) {var t = 0, l = 0, c = (c + '') [0]; while (l = x.indexOf (c, l) +1 ) ++ t; trả về t}); alert (timesCharExist ('char "a" chỉ hiển thị hai lần', 'a'));! (điều này sẽ tăng tốc hơn một chút vì tôi sẽ không gây rối với các nguyên mẫu). Nếu bạn nghĩ tôi sai, tại sao bạn không thể hiện điều đó trước khi ném đá tôi? Chứng minh với tôi rằng chức năng của tôi hút và tôi sẽ chấp nhận nó. Chỉ cho tôi một trường hợp thử nghiệm. Và chiều dài của vars có ảnh hưởng đến tốc độ. Bạn có thể kiểm tra nó.
Ismael Miguel


4

Tôi nghĩ mục đích của regex khác nhiều so với indexOf. indexOfchỉ cần tìm sự xuất hiện của một chuỗi nhất định trong khi trong regex, bạn có thể sử dụng các ký tự đại diện như thế [A-Z]có nghĩa là nó sẽ tìm thấy bất kỳ ký tự viết hoa nào trong từ mà không nêu rõ ký tự thực tế.

Thí dụ:

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


3

Super duper cũ, nhưng tôi cần phải làm một cái gì đó như thế này ngày hôm nay và chỉ nghĩ sẽ kiểm tra SO sau đó. Hoạt động khá nhanh đối với tôi.

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

3
       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");

Tham khảo: - đếm một chuỗi con xuất hiện trong chuỗi để giải thích từng bước.


3

Dựa trên câu trả lời @ Vittim.us ở trên. Tôi thích phương pháp điều khiển mà phương pháp của anh ấy mang lại cho tôi, giúp dễ dàng mở rộng, nhưng tôi cần thêm độ nhạy cảm trường hợp và giới hạn khớp với toàn bộ từ với sự hỗ trợ cho dấu câu. (ví dụ: "tắm" là trong "tắm". nhưng không "tắm")

Regex chấm câu xuất phát từ: https://stackoverflow.com/a/25575009/497745 ( Làm cách nào tôi có thể loại bỏ tất cả dấu chấm câu từ một chuỗi trong JavaScript bằng regex? )

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

Xin vui lòng sửa đổi và cấu trúc lại câu trả lời này nếu bạn phát hiện ra lỗi hoặc cải tiến.


3

Đối với bất kỳ ai tìm thấy chủ đề này trong tương lai, lưu ý rằng câu trả lời được chấp nhận sẽ không luôn trả về giá trị chính xác nếu bạn khái quát hóa nó, vì nó sẽ bóp nghẹt các toán tử regex như $.. Đây là phiên bản tốt hơn, có thể xử lý bất kỳ kim nào :

function occurrences (haystack, needle) {
  var _needle = needle
    .replace(/\[/g, '\\[')
    .replace(/\]/g, '\\]')
  return (
    haystack.match(new RegExp('[' + _needle + ']', 'g')) || []
  ).length
}

3

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

Sử dụng get_occurrence (varS, chuỗi) để tìm sự xuất hiện của cả hai ký tự và chuỗi trong Chuỗi.


2

Thử nó

<?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>


2

Không ai sẽ thấy điều này, nhưng thật tốt khi mang lại chức năng đệ quy và mũi tên một lần nữa (ý định chơi chữ tuyệt vời)

String.prototype.occurrencesOf = function(s, i) {
 return (n => (n === -1) ? 0 : 1 + this.occurrencesOf(s, n + 1))(this.indexOf(s, (i || 0)));
};


1

Bây giờ đây là một chủ đề rất cũ mà tôi đã gặp nhưng như nhiều người đã đưa ra câu trả lời của họ, đây là của tôi với hy vọng giúp được ai đó với mã đơn giản này.

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

Tôi không chắc đó có phải là giải pháp nhanh nhất hay không nhưng tôi thích nó vì đơn giản và không sử dụng regex (tôi chỉ không thích sử dụng chúng!)


1

Hàm này trả về số lần xuất hiện của một từ trong văn bản.

Lưu ý, chúng tôi sử dụng toLowerCase để tính số lần xuất hiện bất kể định dạng (chữ hoa, chữ hoa ...) của từ và văn bản

wordCount(text, word) {
    if (!text || !word) {
      return 0;
    }
    text = text.toLowerCase();
    word = word.toLowerCase();
    return ( text.split( word ).length - 1 );
}

0

Trả lời cho Leandro Batista: chỉ là một vấn đề với biểu thức regex.

 "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>


0

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


0

Hơi muộn nhưng, giả sử chúng ta có chuỗi sau:

var temp = "This is a string.";

Đầu tiên chúng tôi chia ra bất cứ thứ gì bạn muốn khớp, điều này sẽ trả về một chuỗi các chuỗi.

var array = temp.split("is");

Sau đó, chúng tôi nhận được chiều dài của nó và trừ đi 1 cho nó kể từ khi chia mặc định thành một mảng có kích thước 1 và do đó tăng kích thước của nó mỗi lần nó xuất hiện.

var occurrenceCount = array.length - 1;
alert(occurrenceCount); //should output '2'

Bạn cũng có thể làm tất cả điều này trong một dòng như sau:

alert("This is a string.".split("is").length - 1); //should output '2'

Hy vọng nó sẽ giúp: D


1
Tôi có thể đánh dấu đây là một câu trả lời trùng lặp không? Có lẽ bạn nên đọc tất cả các câu trả lời trước khi cung cấp của riêng bạn?
Michiel

2
Đây là câu trả lời của @Orbit tám năm sau ...
aloisdg chuyển sang codidact.com

1
Tôi có nên xóa phản hồi này sau đó?
Juan Enrique Segebre

0

Giải pháp này dựa trên .replace() phương thức chấp nhận RegEx làm tham số đầu tiên và chức năng là tham số thứ hai mà chúng ta có thể sử dụng làm bao đóng để tăng bộ đếm ...

/**
 * 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
}

Sử dụng

subStringCounter("foofoofoo", "bar"); //0

subStringCounter("foofoofoo", "foo"); //3

0

đã đi qua bài viết này.

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
}

Thuật toán tương tự có thể được trình bày ngắn hơn:

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

0

substr_count được dịch sang Javascript từ php


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
}

Kiểm tra chức năng dịch vụ của Phut của Locutus


-2

Thử cái này:

function countString(str, search){
    var count=0;
    var index=str.indexOf(search);
    while(index!=-1){
        count++;
        index=str.indexOf(search,index+1);
    }
    return count;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.