JavaScript:文字列に文字が何回出現しますか?


回答:


82

文字列内の他の文字を削除して、長さを確認できます。

str.replace(/[^a]/g, "").length

ここでは、に含まれるの数がカウントaされstrます。


1
ちょうどあなたが行うことによってだけでなく、大文字を占めることを指摘したい let xLength = str.replace(/[^a || A]/g, "").length;
HappyHands31

@ HappyHands31つまりlet xLength = str.replace(/[^aA]/g, "").length;
ドナルドダック

46

これはa 、以下の例でカウントされます。

str = "A man is as good as his word";
alert(str.split('a').length-1);

大文字と小文字を区別しない場合は、次のようなものが必要です。

alert(str.split( new RegExp( "a", "gi" ) ).length-1);

「A」と「a」を取得するために...「g」フラグは実際には必要ありませんが、「i」フラグは必要です。


1
@Joshそれは誰もが好きなものに依存します。たとえば、読みやすいのでこの答えが好きです。しかし、他の誰かがより技術的または挑戦的であるために別の答えを好むでしょう、他の人はそれがより少ないCPUを食べるなどの理由で別の答えを好むでしょう..だからJavaScriptはとても素晴らしく、自由の味です。
vdegenne

19

正規表現を使用して、文字列内の「a」の数を数えます。

var string = 'aajlkjjskdjfAlsj;gkejflksajfjskda';

document.write(string.match(/a/gi).length);

これがどのように機能するかを説明しましょう:

string.matchこれはRegExメソッドです。指定された文字列(この場合は文字列 "string")内で指定された正規表現を検索します。

(/a/gi)これは実際の正規表現です。「文字aを見つけて」と書かれています。とても簡単です。また、「g」と「i」の2つのフラグもあります。「g」は、文字「a」のすべての出現を見つけることを意味します。それ以外の場合は、最初のものだけが検出され、1番を超えてカウントされることはありません。2番目のフラグは「i」です。これにより、正規表現はその文字のすべてのケースに一致します。そのフラグ(i)がない場合、上記のコードは文字列の大文字の「A」をスキップするため、4つしかカウントされません。「i」のため、大文字小文字が一致します。大文字と小文字を一致させる場合は、「i」を削除します。

string.matchすべての一致の配列を返すため、このlengthメソッドを使用して配列エントリの数を取得します。そのような単純な!


私はあなたがgiからiを削除するべきだと思います、それはエラーの原因です。ボーナスとして追加することもできますが、私の場合、特に大文字と小文字を区別する一致を探していました。
Gismo Ranas 2018年

1
ここでの問題は、に「a」が含まれていない場合string、にstring.match(/a/gi)等しくなりnull、エラーが発生することCannot read property 'length' of nullです。
pbialy

1
「GI」部分は、サー@Drazzah非常に有用だった
ジェイソン・セブリング

14

私の意見では、この場合、正規表現を避ける方が便利で安全です。

あらゆる種類の文字を数えたいのであれば、2つの式を考慮する必要があるからです。以下のための一つの共通の文字とする第二の特別のような例えば文字[]^というように。忘れがちですが、覚えていてもコードを不必要に拡張していると思います。

、この場合、文字列のためのstr文字ch、これらのソリューションのそれぞれに動作します:

let count = str.split(ch).length - 1

@Sarfrazに感謝します

または

let count = str.split('').filter(x => x == ch).length

または

let count = 0
str.split('').forEach(x => x == ch ? count++ : null)

楽しい!



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

1
コードスニペットで問題が解決する場合もありますが、コードの目的(問題の解決方法)を説明する必要があります。さらに、stackoverflow.com / help / how
Ahmad F

@AhmadFこれは次の目的で使用できます>文字列に文字が出現する回数。このスクリプトを実行すると、複数回発生するプロパティ(文字)を持つオブジェクトが取得されます。
ニティーン。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.