Javascript-修改regexp构造函数或添加标记

Javascript-修改regexp构造函数或添加标记,javascript,regex,Javascript,Regex,我需要根据具有公共元素的复杂regexp解析输入 我想让它成为我2014年的文本 其中date将是另一个长regexp或另一组令牌,如 Regexp.tokens.date=/{year}{month}{day}/etc 然后当它使用另一个代币时 Regexp.tokens.year = /** Some native regexp matching year number **/ 我希望在测试之前,所有这些{tokens}都被递归地解析为本机regexp 换句话说,我想添加标记列表及其含义,

我需要根据具有公共元素的复杂regexp解析输入

我想让它成为我2014年的文本

其中date将是另一个长regexp或另一组令牌,如

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

然后当它使用另一个代币时

Regexp.tokens.year = /** Some native regexp matching year number **/
我希望在测试之前,所有这些{tokens}都被递归地解析为本机regexp

换句话说,我想添加标记列表及其含义,然后能够使用它们生成regexp


我试图修改RegExp的构造函数,但它没有做任何更改。

与其乱动现有的东西,不如创建自己的包装器

比如:

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"));