2014-12-01 1 views
0

공통 요소가있는 복잡한 정규 표현식에 대한 입력을 구문 분석해야합니다.Javascript - regexp 생성자 수정 또는 토큰 추가

또 다른 토큰을 사용하기 때문에 내가 날짜가 다른 긴 정규 표현식 또는

Regexp.tokens.date = /{year}|{month}|{day}/

그리고 같은 다른 토큰의 일부 세트 일부가 될 것입니다 경우 "My text from 2014".match(/{date}/);

처럼하고 싶습니다

Regexp.tokens.year = /** Some native regexp matching year number **/ 

모두 {tokens}(r ecursively) 테스트하기 전에 원시 regexp로 구문 분석.

다른 말로하면 - 토큰 목록과 그 의미를 추가 한 다음이를 사용하여 regexp를 만들 수 있기를 원합니다.

RegExp의 생성자를 수정하려고했지만 변경하지 않습니다.

답변

0

기존 내용으로 해킹하는 대신 항상 래퍼을 만들어야합니다. 같은

뭔가 :

function MyRegex(src,flags) { 
    for(var k in MyRegex.tokens) if(MyRegex.tokens.hasOwnProperty(k)) { 
     src = src.replace(new RegExp("\\{"+k+"\\}","g"),MyRegex.tokens[k]); 
    } 
    this.pattern = new RegExp(src,flags); 
}; 
MyRegex.tokens = { 
    "year": "your regex as string here", 
    // ... 
}; 
MyRegex.prototype.test = function(str) { 
    return this.pattern.test(str); 
}; 
// define more methods as needed 

사용하려면 :

var regex = new MyRegex("{date}"); 
console.dir(regex.test("My text from 2014"));