Czy istnieje prosty sposób sprawdzenia, ile razy znak występuje w ciągu?
Odpowiedzi:
Możesz usunąć dowolny inny znak w ciągu i sprawdzić jego długość:
str.replace(/[^a]/g, "").length
Tutaj liczy się, ile ajest w str.
let xLength = str.replace(/[^a || A]/g, "").length;
let xLength = str.replace(/[^aA]/g, "").length;
Liczy się to a w poniższym przykładzie:
str = "A man is as good as his word";
alert(str.split('a').length-1);
Jeśli chcesz, aby wielkość liter nie była rozróżniana, potrzebujesz czegoś takiego jak
alert(str.split( new RegExp( "a", "gi" ) ).length-1);
Aby przechwytywał flagę „A” i „a” ... „g”, nie jest naprawdę potrzebna, ale potrzebujesz flagi „i”
Użyj wyrażenia regularnego, aby policzyć liczbę „a” w ciągu.
var string = 'aajlkjjskdjfAlsj;gkejflksajfjskda';
document.write(string.match(/a/gi).length);
Pozwól mi wyjaśnić, jak to działa:
string.matchTo jest metoda RegEx. Wyszukuje określone wyrażenie regularne wewnątrz określonego ciągu (w tym przypadku jest to ciąg „ciąg”).
(/a/gi)To jest rzeczywiste wyrażenie regularne. Brzmi: „znajdź znak a”. To jest bardzo proste. Zawiera również dwie flagi, „g” i „i”. „G” mówi, że należy znaleźć WSZYSTKIE wystąpienia znaku „a”. W przeciwnym razie znalazłby tylko pierwszy i nigdy nie odliczałby więcej niż numer jeden. Druga flaga to „i”. Sprawia, że wyrażenie RegEx pasuje do wszystkich przypadków tego znaku. Gdyby tej flagi (i) nie było, powyższy kod liczyłby tylko 4, ponieważ pomijałby wielką literę „A” w ciągu. Ze względu na „i” dopasuje duże i małe litery. Usuń „i”, jeśli chcesz dopasować wielkość liter.
string.matchzwraca tablicę wszystkich dopasowań, więc używamy lengthmetody, aby pobrać liczbę wpisów tablicy. Proste!
a” w string, to string.match(/a/gi)jest równe nulli masz błąd Cannot read property 'length' of null.
To dlatego, że jeśli chcemy móc liczyć dowolne znaki, musimy wziąć pod uwagę dwa wyrażenia. Jeden dla wspólnych znaków, a drugi dla specjalnych znaków, na przykład takich jak [, ], ^i tak dalej. Łatwo o tym zapomnieć, ale nawet jeśli o tym pamiętamy, myślę, że niepotrzebnie rozszerzamy nasz kod.
W tym przypadku dla string stri character chdziała każde z tych rozwiązań:
let count = str.split(ch).length - 1
(dzięki @Sarfraz )
lub
let count = str.split('').filter(x => x == ch).length
lub
let count = 0
str.split('').forEach(x => x == ch ? count++ : null)
Cieszyć się!
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);