2009-06-11 2 views
4

자바 스크립트로 일치하는 문자열의 대소 문자를 바꾸는 쉬운 방법이 있습니까?Javascript replace()를 대소 문자 바꾸기

문자열 : <li>something</li>

정규식 : /<([\w]+)[^>]*>.*?<\/\1>/

그리고 내가 뭘하려는 것은 (가능하면 교체 내부) 경기를 모두 대문자로 $ 1 교체입니다. 나는 $ 1이 유효한 일치가 아니고 문자열이 아닌 '$ 1'일 때 완전히 확신하지 못한다. toUpperCase가 작동하지 않는다.

그럼 어떻게 되가려합니까? <LI>something</li>? 방법이 아닌 정규식.

답변

12

replace 메소드에 replacer 함수를 전달할 수 있습니다. 첫 번째 인수는 전체 일치이고 두 번째 인수는 $ 1입니다. 따라서이 양식을 추가로 캡처하여 여분의 작업을 저장

mystring.replace(/<([\w]+)[^>]*>.*?<\/\1>/, function(a,x){ 
    return a.replace(x,x.toUpperCase()); 
}) 

있지만 (빨리해야하지만 확인하지 않은) :

쉬운
mystring.replace(/<([\w]+)([^>]*>.*?<\/\1>)/, function(a,x,y){ 
    return ('<'+x.toUpperCase()+y); 
}) 
+0

Perfect :) Thanks! –

0

사용 후 정규식 일치를 사용하고 아마 .toUpperCase와 일치합니다. 정규 표현식을 약간 수정하여 두 번째 캡처 그룹에 추가했습니다.

var str = '<li>something</li>'; 
var arr = /<([\w]+)([^>]*>.*?<\/)\1>/.exec(str); 
str = '<' + arr[1].toUpperCase() + arr[2] + arr[1].toUpperCase() + '>';