Có cách nào đơn giản để kiểm tra số lần một ký tự xuất hiện trong một Chuỗi không?
Có cách nào đơn giản để kiểm tra số lần một ký tự xuất hiện trong một Chuỗi không?
Câu trả lời:
Bạn có thể xóa bất kỳ ký tự nào khác trong chuỗi và kiểm tra độ dài:
str.replace(/[^a]/g, "").length
Ở đây nó được đếm có bao nhiêu as trong str.
let xLength = str.replace(/[^a || A]/g, "").length;
let xLength = str.replace(/[^aA]/g, "").length;
Điều này được tính a trong ví dụ dưới đây:
str = "A man is as good as his word";
alert(str.split('a').length-1);
Nếu bạn muốn phân biệt chữ hoa chữ thường, bạn muốn một cái gì đó giống như
alert(str.split( new RegExp( "a", "gi" ) ).length-1);
Để nó lấy cờ "A" và "a" ... "g" không thực sự cần thiết, nhưng bạn cần cờ "i"
Sử dụng RegEx để đếm số "a" trong một chuỗi.
var string = 'aajlkjjskdjfAlsj;gkejflksajfjskda';
document.write(string.match(/a/gi).length);
Hãy để tôi giải thích cách hoạt động của điều này:
string.matchĐây là một phương thức RegEx. Nó tìm kiếm RegEx được chỉ định bên trong chuỗi được chỉ định (trong trường hợp này là chuỗi "string").
(/a/gi)Đây là RegEx thực tế. Nó đọc, "tìm ký tự a." Nó rất đơn giản. Nó cũng mang hai lá cờ, "g" và "i". Chữ "g" nói để tìm TẤT CẢ các lần xuất hiện của ký tự "a". Nếu không, nó sẽ chỉ tìm thấy số đầu tiên và nó sẽ không bao giờ vượt qua số một. Lá cờ thứ hai là "i". Nó làm cho RegEx khớp với tất cả các trường hợp của ký tự đó. Nếu cờ (i) đó không có ở đó, mã trên sẽ chỉ được tính 4, vì nó sẽ bỏ qua chữ hoa "A" trong chuỗi. Vì chữ "i", nó sẽ khớp với chữ hoa và chữ thường. Bỏ chữ "i" nếu bạn muốn khớp chữ cái.
string.matchtrả về một mảng của tất cả các kết quả phù hợp, vì vậy chúng tôi sử dụng lengthphương thức để truy xuất số lượng mục nhập của mảng. Đơn giản như thế!
a" trong string, thì string.match(/a/gi)bằng nullvà bạn gặp lỗi Cannot read property 'length' of null.
Đó là bởi vì nếu chúng ta muốn có thể đếm bất kỳ loại ký tự nào thì chúng ta cần phải xem xét hai biểu thức. Một cho chung nhân vật và thứ hai cho đặc biệt nhân vật ví dụ như [, ], ^và vân vân. Thật dễ dàng để quên nó, nhưng ngay cả khi chúng ta nhớ nó, tôi nghĩ rằng chúng ta đang mở rộng mã của mình một cách không cần thiết.
Trong trường hợp này, đối với chuỗi strvà ký tự chhoạt động, mỗi giải pháp sau:
let count = str.split(ch).length - 1
(cảm ơn @Sarfraz )
hoặc là
let count = str.split('').filter(x => x == ch).length
hoặc là
let count = 0
str.split('').forEach(x => x == ch ? count++ : null)
Thưởng thức!
var s = "dqsskjhfds";
alert(s.length - s.replace(/a/g, "").length); // number of 'a' in the string
var a = "acvbasbb";
var b= {};
for (let i=0;i<a.length;i++){
if((a.match(new RegExp(a[i], "g"))).length > 1){
b[a[i]]=(a.match(new RegExp(a[i], "g"))).length;
}
}
console.log(b);