2012-04-23 3 views
2

온라인 필자 식별을위한 메트릭을 작성하는 스크립트 작업 중입니다. 내가 문학에서 발견 한 것들 중 하나는 대소 문자 독립적 인 각 문자 (얼마나 많은 a, 얼마나 많은 b 등)의 빈도를 세는 것입니다. 이후 각 편지에 대해 별도의 성명을 작성하고 싶지 않아, 내가 루프를 시도하고있어,하지만 난 그것을 알아낼 수 없습니다. 내가 생각할 수있는 최선의 방법은 ASCII 문자 코드를 16 진수로 변환하는 것입니다. 그러면 ... 기적적으로 기적이 일어납니다. 나는, 그것은 문자 H 전자의 X, 내가 원하는 문자를위한이 아닌 16 진수 코드로 진수를 해석하는 수행 할 때자바 스크립트를 사용하여 루프에서 별도의 문자를 추출하는 정규식

는 지금까지, 나는

element = id.toLowerCase(); 
var hex = 0; 
for (k=97; k<122; k++){ 
    hex = k.toString(16); //gets me to hex 
    letter = element.replace(/[^\hex]/g, "")//remove everything but the current letter I'm looking for 
    return letter.length // the length of the resulting string is how many times the ltter came up 
} 

하지만 물론

을 가지고있다.

+0

이것은 최선의 방법은 아닙니다. @ ElliotBonneville의 대답을보십시오. 그러나 특정 질문에 답하기 위해 변수 컴포넌트에서 정규 표현식을 만들려면 정규식 리터럴 대신'new RegExp (string)'을 사용하십시오 :'var hexRegex = new RegExp ("[^ \\"+ hex + "] ","g "); –

+0

@ MarkReed : [escape] (http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript/3561711#)가 필요할 수 있습니다. 3561711) 일반 문자로 원하는 경우 문자열. – hugomg

답변

5

하면 16 진수로 변환 할 것입니다,하지만 당신은 할 수 문자열의 문자를 통해 반복하고 각각 해시로 사용되는 오브젝트에 나타난 횟수를 추적 유지하는 이유는 확실하지 :

var element = id.toLowerCase(); 
var keys = {}; 

for(var i = 0, len = element.length; i<len; i++) { 
    if(keys[element.charAt(i)]) keys[element.charAt(i)]++; 
    else keys[element.charAt(i)] = 1; 
} 

을 배열을 사용하여 동일한 작업을 수행 할 수 있지만 해시가 빠릅니다.

+0

숫자 코드를 사용하려는 경우 element.charCodeAt()를 사용할 수도 있습니다. – hugomg

+0

어떤 캐릭터가 어떤 캐릭터인지 확인하기 위해 다시 변환해야하는 이유는 없지만 쉽게 할 수 있습니다. –

+0

와우. 그게 내가 시도했던 것보다 훨씬 더 매끄럽다. 저는 Matlab과 mathematica 배경에서 이걸 가져올 것입니다. 그래서 이런 식으로 진행되는 일은 결코 저에게 일어나지 않았습니다. 감사. – bigbenbt

관련 문제