2011-10-05 2 views
5

다음에 문자열의 각 단어의 첫 글자를 대문자로 교체하고 정규식 사용 :, 완벽하게 작동 중복 불구하고, 자바 스크립트

'leap of, faith'.replace(/([^ \t]+)/g,"$1");

및 인쇄 "믿음의 도약"하지만에서 다음 :

:

'leap of, faith'.replace(/([^ \t]+)/g,RegExp.$1); 내가 같이 각 단어의 첫 글자를 대문자로 할 결과 "믿음 믿음 믿음"

를 인쇄

'leap of, faith'.replace(/([^ \t]+)/g,RegExp.$1.capitalize());

작동하지 않습니다. 아마 그룹의 값을 대체하기 전에 "$ 1"을 대문자로하기 때문에 어느 쪽도,

'leap of, faith'.replace(/([^ \t]+)/g,"$1".capitalize);

하지 않습니다.

나는 당신이 ") (.replace"의 두 번째 인수로 함수를 전달할 수있는 프로토 타입의 활용() 메소드

+0

'.toUpperCase()'메소드를 사용하지 않는 이유는 무엇입니까? –

+1

이것은 문자열의 모든 문자를 대문자로 변환하며 OP는 첫 번째 문자 만 변환하려고합니다. – Pointy

+2

당신은 toUpper + 답을'str.replace (/ \ b [a-z]/g, function() {반환 인수 [0] .toUpperCase()}) ')와 함께 사용할 수 있습니다. –

답변

11

를 사용하여 한 줄에서이 작업을 수행 할 :

"string".replace(/([^ \t]+)/g, function(_, word) { return word.capitalize(); }); 

인수에 이 함수는 먼저 전체 일치 및 일치하는 그룹입니다. 이 경우 하나의 그룹 ("단어") 만 있습니다. 함수의 반환 값이 대체 값으로 사용됩니다.

+0

고마워요. 그러나 JS는 함수에 대한 두 개의 인수가 지정한 것임을 어떻게 알 수 있습니까? – Daud

+0

?? 어 ... 나는 그 질문을 이해하지 못한다. JavaScript는 ".replace()"메소드가 지정되고 구현 된 방법이기 때문에 "알 수 있습니다". 두 번째 인수가 함수이면 런타임 시스템은 정규 표현식 결과의 인수에서 인수를 호출하여 런타임 시스템을 호출합니다. – Pointy

+0

제 말은 mozilla 레퍼런스에서 https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/replace를 확인했는데 정규 표현식 결과의 특정 결과가 전달 될 때 언급하지 않았습니다. 2 개의 인수가 지정됨 – Daud