JavaScript : 문자열에서 문자가 몇 번 발생합니까?


답변:


76

문자열에서 다른 문자를 제거하고 길이를 확인할 수 있습니다.

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

여기에 as가 몇 개 있는지 계산됩니다 str.


1
그냥 수행하여 당신은뿐만 아니라 대문자 설명 할 수 있음을 지적 할 let xLength = str.replace(/[^a || A]/g, "").length;
HappyHands31

@ HappyHands31 의미let xLength = str.replace(/[^aA]/g, "").length;
Donald Duck

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 방법입니다. 지정된 문자열 (이 경우 문자열 "문자열") 내에서 지정된 RegEx를 검색합니다.

(/a/gi)이것은 실제 RegEx입니다. "문자 a를 찾으십시오."라고 읽습니다. 아주 간단합니다. 또한 "g"와 "i"라는 두 개의 플래그를 전달합니다. "g"는 문자 "a"의 모든 항목을 찾습니다. 그렇지 않으면 첫 번째 항목 만 찾고 숫자 1을 넘지 않습니다. 두 번째 플래그는 "i"입니다. RegEx가 해당 문자의 모든 경우와 일치하도록 만듭니다. 해당 플래그 (i)가 없으면 위의 코드는 문자열에서 대문자 "A"를 건너 뛰기 때문에 4 만 계산됩니다. "i"때문에 대문자 소문자 가 일치 합니다. 대소 문자를 일치 시키려면 "i"를 제거하십시오.

string.match모든 일치 항목의 배열을 반환하므로이 length메서드를 사용하여 배열 항목 수를 검색합니다. 그렇게 간단합니다!


나는 당신이 gi에서 i를 제거해야한다고 생각합니다. 그것은 오류의 원인입니다. 보너스로 추가 할 수 있지만 제 경우에는 특별히 대소 문자 구분 일치를 찾고있었습니다.
Gismo Ranas

1
여기서 문제는 "이없는 경우이다 a에서" string다음 string.match(/a/gi)에 해당 null하고 오류가 발생했습니다 Cannot read property 'length' of null.
pbialy

1
'gi'부분은 매우 도움이되었습니다. @Drazzah 경
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을
아마드 F에게

@AhmadF 당신은 이것을 위해 사용할 수 있습니다> 문자열에서 문자가 몇 번이나 발생하는지. 이 스크립트를 실행하면 두 번 이상 발생하는 속성 (문자)이있는 개체를 얻을 수 있습니다.
Nitin.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.