我有五个不同的正则表达式,它们有共同的部分。?
末尾的所有部分都是可选的,但顺序必须保持不变。title1
-title6
是正则表达式彼此不同的地方。
我如何对这些进行分组以消除公共部分的重复?
伪代码如下:
title1 type? column option?
title2 name? type? column option?
title3 name? type? column option?
title4 name? column option?
title5 name? column other
到目前为止,我所拥有的是:
(title1 type?|(title2|title3) name? type?|(title4|title5) name?) column option?
除了重复之外,我不知道other
为最后一个正则表达式添加部分的最佳方法是什么。
编辑
我决定坚持我最初的计划,将所有正则表达式分开,因为我必须从中提取大量变量。如果有人好奇我的解决方案是什么:
var blocks = {
name1: /regex1/,
name2: /regex2/,
name3: /regex3/,
...
};
var regex = [
createRegex(['name1', 'name2', 'name3', ...]),
createRegex(['name1', 'name3', 'name4', ...]),
...
];
function createRegex = function (params) {
var regex = '';
for (var i=0; i < params.length; i++) {
var name = params[i];
regex += blocks[name].source;
}
return new RegExp(regex, 'i');
}
这就是我初始化正则表达式列表的方式,它不是伪代码(正则表达式及其名称除外)。