2013-04-02 4 views
1

자바 스크립트 파일에서 번역을위한 문자열 추출기를 만들었습니다. 시작 지점 (see)으로 사용한 jsgettext 프로젝트를 찾았습니다.자바 스크립트 메소드 호출을 추출하는 정규 표현식

자바 스크립트 파일 내에 __() 메소드에 대한 호출을 찾으려면 reqular 표현식을 사용합니다. 간단한 호출이 성공적으로 발견되었지만 __('string', { a: 'b'})과 같은 인수를 사용하는 호출은 성공적이지 않습니다.

정규 표현식을 수정하여 메소드 호출을 인수로 일치 시키려고했지만 성공하지 못했습니다 (정규 표현식 전문가가 아닙니다).

내 질문 : 다음 정규식을 수정하여 이와 같은 문자열을 일치시키는 방법은 무엇입니까?

// this is catched successfully 
// var string = __("Please enter %number% more characters."); 

// this is problematic 
var string = __("Please enter %number% more characters.", { '%number%' : 2 }); 

정규 표현식 : 당신은 그냥 일치 할 필요

__("Please enter %number% more characters.", { '%number%' : 2 }); 

:

$keywords = join('|', array('__')); 
preg_match_all('# (?:' . $keywords . ') \(\\ *" ((?: (?>[^"\\\\]++) | \\\\\\\\ | (?<!\\\\)\\\\(?!\\\\) | \\\\")*) (?<!\\\\)"\\ *\) #ix', $content, $matches, PREG_SET_ORDER); 

당신을 감사합니다

+0

이'$ keywords = join ('|', array ('__'));는 나에게 이해가되지 않는다 ... – HamZa

+1

다른 i18n 함수와 일치시키기위한 것이다. 질문에서 그 코드를 삭제했습니다. – Mishal

답변

0

난 당신이 정말 좋아 전체 호출과 일치 할 필요는 생각하지 않는다 :

__("Please enter %number% more characters.", 

나머지는 데이터베이스 내부의 번역에 포함되지 않아야하는 인수 일 뿐이므로 그대로 두십시오.

따라서 8189 정규 표현식을 편집하려면 *\) #ix 대신 *(?:\)|,) #ix으로 끝내야합니다.

+0

고마워요 @Vyktor, 완벽하게 작동합니다! – Mishal

관련 문제