updated 修复兄弟姐妹多级匹配混乱的错误,精简算法

妈妈的爸爸的姐姐的妹妹的哥哥的妹妹的姐姐 会出现错误解析
This commit is contained in:
mumuy 2016-04-29 14:09:45 +08:00
parent c629a06351
commit 3ba32fc7b5

View File

@ -7,19 +7,19 @@
var _filter = [
/* 表亲 */
{//表亲的关系
exp:/^(.+)&o([^#].+)&o/g,
exp:/^(.+)&o([^#]+)&o/g,
str:'$1$2&o'
},
{//表亲的关系
exp:/^(.+)&l([^#].+)&l/g,
exp:/^(.+)&l([^#]+)&l/g,
str:'$1$2&l'
},
{//表亲的关系
exp:/^(.+)&o(.+)&l/g,
exp:/^(.+)&o([^#]+)&l/g,
str:'$1$2'
},
{//表亲的关系
exp:/^(.+)&l(.+)&o/g,
exp:/^(.+)&l([^#]+)&o/g,
str:'$1$2'
},
/* 父母 */
@ -45,24 +45,20 @@
str:',$1b'
},
{//如果自己是男性,父母的儿子是自己或者兄弟
con:/(,[fhs]|,[olx]b),[mf],s/,
exp:/^(.+)?,[mf],s(.+)?$/,
str:'$1$2#$1,xb$2'
exp:/^(.*)(,[fh]|[xol]b),[mf],s(.*)$/,
str:'$1$2,xb$3#$1$2$3'
},
{//如果自己是女性,父母的女儿是自己或者姐妹
con:/(,[mwd]|,[olx]s),[mf],d/,
exp:/^(.+)?,[mf],d(.+)?$/,
str:'$1$2#$1,xs$2'
exp:/^(.*)(,[mw]|[xol]s),[mf],d(.*)$/,
str:'$1$2,xs$3#$1$2$3'
},
{//如果自己是女性,父母的儿子是自己兄弟
con:/(,[mwd]|,[olx]s),[mf],s/,
exp:/,[mf],s/g,
str:',xb'
exp:/(,[mw]|[xol]s),[mf],s/,
str:'$1,xb'
},
{//如果自己是男性,父母的女儿是自己姐妹
con:/(,[fhs]|,[olx]b),[mf],d/,
exp:/,[mf],d/g,
str:',xs'
exp:/(,[fh]|[xol]b),[mf],d/,
str:'$1,xs'
},
{//父母的儿子是自己或兄妹
exp:/^,[mf],s(.+)?$/,
@ -82,24 +78,20 @@
str:'$2'
},
{//如果自己是男性,兄弟姐妹的兄弟就是自己的兄弟或自己
con:/(,[fhs]|,[olx]b),[olx][sb],[olx]b/,
exp:/^(.+)?,[olx][sb],[olx]b(.+)?$/,
str:'$1,xb$2#$1$2'
exp:/^(.*)(,[fh])(,[olx][sb])+,[olx]b(.*)$/,
str:'$1$2,xb$4#$1$2$4'
},
{//如果自己是女性,兄弟姐妹的姐妹就是自己的姐妹或自己
con:/(,[mwd]|,[olx]s),[olx][sb],[olx]s/,
exp:/^(.+)?,[olx][sb],[olx]s(.+)?$/,
str:'$1,xs$2#$1$2'
},
{//如果自己是女性,兄弟姐妹的兄弟就是自己的兄弟
con:/(,[mwd]|,[olx]s),[olx][sb],[olx]b/,
exp:/,[olx][sb],[olx]b/g,
str:',xb'
exp:/^(.*)(,[mw])(,[olx][sb])+,[olx]s(.*)$/,
str:'$1$2,xs$4#$1$2$4'
},
{//如果自己是男性,兄弟姐妹的姐妹就是自己的姐妹
con:/(,[fhs]|,[olx]b),[olx][sb],[olx]s/,
exp:/,[olx][sb],[olx]s/g,
str:',xs'
exp:/(,[fh])(,[olx][sb])+,[olx]s/g,
str:'$1,xs'
},
{//如果自己是女性,兄弟姐妹的兄弟就是自己的兄弟
exp:/(,[mw])(,[olx][sb])+,[olx]b/g,
str:'$1,xb'
},
{//不知道性别,兄弟姐妹的兄弟是自己或兄弟
exp:/^,[olx][sb],[olx]b(.+)?$/,
@ -588,13 +580,7 @@
s = selector;
for(var i in _filter){
var item = _filter[i];
if(item['con']){
if(selector.match(item['con'])){
selector = selector.replace(item['exp'],item['str']);
}
}else{
selector = selector.replace(item['exp'],item['str']);
}
if(selector.indexOf('#')>-1){
var arr = selector.split('#');
for(var i=0;i<arr.length;i++){
@ -605,7 +591,6 @@
}
}
}while(s!=selector);
// console.log('selector#',selector);
if(status){
selector = selector.substr(1); //去前面逗号
if(selector==''&&sex>-1&&sex!=sex2){
@ -719,7 +704,7 @@
window.relationship = relationship;
})(window);
// console.log(relationship({text:'姐姐的妹妹的姐姐',sex:1}));
// console.log(relationship({text:'妈妈的爸爸的姐姐的妹妹的哥哥的妹妹的姐姐',sex:1}));
//老公的老婆的儿子的爸爸的老婆的儿子的爸爸
//我的三舅的儿子的爸爸的妹妹的儿子的叔叔的哥哥
//老婆的外孙的姥姥