JavaScript:字符在字符串中出现几次?


Answers:


76

您可以删除字符串中的任何其他字符并检查长度:

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

这是怎么算的很多a小号都在str


1
只想指出,您也可以通过这样做来考虑大写字母 let xLength = str.replace(/[^a || A]/g, "").length;
HappyHands31,19年

@ HappyHands31您的意思是let xLength = str.replace(/[^aA]/g, "").length;
唐老鸭

43

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

18

使用RegEx来计算字符串中“ a”的数量。

var string = 'aajlkjjskdjfAlsj;gkejflksajfjskda';

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

让我解释一下它是如何工作的:

string.match这是一个RegEx方法。它在指定的字符串(在本例中为字符串“ string”)中搜索指定的RegEx。

(/a/gi)这是实际的RegEx。它显示为“找到字符a”。非常简单 它还带有两个标志,即“ g”和“ i”。“ g”表示找到字符“ a”的所有出现。否则,它只会找到第一个,并且永远不会超过第一。第二个标志是“ i”。它使RegEx匹配该字符的所有大小写。如果该标记(i)不存在,则上面的代码将仅计4,因为它将跳过字符串中的大写字母“ A”。因为“i”的,它会上匹配小写。如果要匹配字母大小写,请删除“ i”。

string.match返回所有匹配length项的数组,因此我们使用该方法检索数组条目的数量。就那么简单!


我认为您应该从gi中删除i,这是错误的来源。您可以将其添加为奖金,但就我而言,我一直在专门寻找区分大小写的比赛。
Gismo Ranas

1
这里的问题是,如果你没有“ astring,那么string.match(/a/gi)等于null并且你会出错Cannot read property 'length' of null
pbialy

1
@giazz先生,“ gi”部分非常有帮助
Jason Sebring

11

我认为在这种情况下避免使用正则表达式更为方便和安全

这是因为如果我们希望能够计算任何种类的字符,那么我们需要考虑两个表达式。对于一个普通的字符和第二的特殊例如像人物[]^等等。忘记它很容易,但是即使我们记得它,我认为我们也不必要扩展我们的代码。

这种情况下,对于字符串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-to-answer
Ahmad F

@AhmadF您可以将其用于>字符在字符串中出现多少次。当您运行此脚本时,您将获得一个具有属性(字符)的对象,该对象发生一次以上。
尼丁。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.