updated 两者组合查询时性别判断优化
This commit is contained in:
1 parent
ef1131f034
commit
6f967a8ad6
4 files changed
+43
-24
No files matched your search
Vendored
+1
-1
@@ -1 +1 @@
|
||||
!function(s,f){"object"==typeof module&&module.exports?module.exports=f():s.relationship=f()}("undefined"!=typeof window?window:this,function(){var e=[{exp:/^(.+)&o([^#]+)&l/g,str:"$1$2"},{exp:/^(.+)&l([^#]+)&o/g,str:"$1$2"},{exp:/^(.+)?,o([sb])([^#]+)&l/g,str:"$1,x$2$3"},{exp:/^(.+)?,l([sb])([^#]+)&o/g,str:"$1,x$2$3"},{exp:/(,[ds],(.+),[ds])&[ol]/g,str:"$1"},{exp:/(,o[sb])+(,o[sb])/,str:"$2"},{exp:/(,l[sb])+(,l[sb])/,str:"$2"},{exp:/^(.*)(,[fh1])(,[olx][sb])+,[olx]b(.*)$/,str:"$1$2,xb$4#$1$2$4"},{exp:/^(.*)(,[mw0])(,[olx][sb])+,[olx]s(.*)$/,str:"$1$2,xs$4#$1$2$4"},{exp:/(,[fh1])(,[olx][sb])+,[olx]s/g,str:"$1,xs"},{exp:/(,[mw0])(,[olx][sb])+,[olx]b/g,str:"$1,xb"},{exp:/^,[olx][sb],[olx]b(.+)?$/,str:"$1#,xb$1"},{exp:/^,[olx][sb],[olx]s(.+)?$/,str:"$1#,xs$1"},{exp:/^,x([sb])$/,str:",o$1#,l$1"},{exp:/m,h/g,str:"f"},{exp:/f,w/g,str:"m"},{exp:/,[xol][sb](,[mf])/g,str:"$1"},{exp:/,[mf],d&([ol])/,str:",$1s"},{exp:/,[mf],s&([ol])/,str:",$1b"},{exp:/^(.*)(,[fh1]|[xol]b),[mf],s(.*)$/,str:"$1$2,xb$3#$1$2$3"},{exp:/^(.*)(,[mw0]|[xol]s),[mf],d(.*)$/,str:"$1$2,xs$3#$1$2$3"},{exp:/(,[mw0]|[xol]s),[mf],s/,str:"$1,xb"},{exp:/(,[fh1]|[xol]b),[mf],d/,str:"$1,xs"},{exp:/^,[mf],s(.+)?$/,str:",1$1#,xb$1"},{exp:/^,[mf],d(.+)?$/,str:",0$1#,xs$1"},{exp:/,[ds]&o,ob/g,str:",s&o"},{exp:/,[ds]&o,os/g,str:",d&o"},{exp:/,[ds]&l,lb/g,str:",s&l"},{exp:/,[ds]&l,ls/g,str:",d&l"},{exp:/,[ds](&[ol])?,[olx]s/g,str:",d"},{exp:/,[ds](&[ol])?,[olx]b/g,str:",s"},{exp:/(,[mwd0](&[ol])?|[olx]s),[ds](&[ol])?,m/g,str:"$1"},{exp:/(,[mwd0](&[ol])?|[olx]s),[ds](&[ol])?,f/g,str:"$1,h"},{exp:/(,[fhs1](&[ol])?|[olx]b),[ds](&[ol])?,f/g,str:"$1"},{exp:/(,[fhs1](&[ol])?|[olx]b),[ds](&[ol])?,m/g,str:"$1,w"},{exp:/^,[ds],m(.+)?$/,str:"$1#,w$1"},{exp:/^,[ds],f(.+)?$/,str:"$1#,h$1"},{exp:/,[wh](,[ds])/g,str:"$1"},{exp:/,w,h|,h,w/g,str:""},{exp:/(.+)?\[([^\|]+?)\|([^\[\]]*\|[^\[\]]*)\](.+)?/g,str:"$1$2$4#$1[$3]$4"},{exp:/(.+)?\[([^\[\]\|]+?)\|([^\[\]\|]+?)?\](.+)?/g,str:"$1$2$4#$1$3$4"}],h={"":["自己","我","本人","在下"],"[f,f|f,m|m,f|m,m]":["祖辈"],"[f,f|f,m]":["祖父母","爷爷奶奶"],"[m,f|m,m]":["外祖父母","外公外婆","姥姥姥爷"],"[f|m]":["父母","爹娘","爹妈","爸妈","爸爸妈妈","双亲","二亲","两亲","二老","高堂"],"[h,f|h,m]":["公婆","翁姑","大家官","公公婆婆"],"[w,f|w,m]":["岳父母","岳父岳母"],"[xb|xs]":["兄弟姐妹","同胞","手足"],"[f,xb,s&o|f,xb,s&l]":["堂兄弟","叔伯兄弟"],"[f,xb,d&o|f,xb,d&l]":["堂姐妹","叔伯姐妹"],"[m,xs,s&o|m,xs,s&l]":["姨兄弟"],"[m,xs,d&o|m,xs,d&l]":["姨姐妹"],"[f,xs,s&o|f,xs,s&l|m,xb,s&o|m,xb,s&l]":["表兄弟"],"[f,xs,d&o|f,xs,d&l|m,xb,d&o|m,xb,d&l]":["表姐妹"],"[ob|os]":["哥哥姐姐"],"[lb|ls]":["弟弟妹妹"],"[s|d]":["子女","儿女","小孩","孩子","孩儿","宝宝","宝贝","娃","儿辈","子辈"],"[s,s|s,d|d,s|d,d]":["孙辈"],"[s|d|s,s|s,d|d,s|d,d]":["儿孙","子孙"],f:["爸爸","父亲","老爸","阿爸","阿爹","老窦","爸","父","爹","爹爹","爹地","爹啲","老爹","大大","老爷子"],"f,f":["爷爷","祖父","奶爷","阿爷","阿公","吖爷","老爷"],"f,f,f":["曾祖父","曾祖","太公","太爷","太爷爷","祖公","祖奶爷","太老爷"],"f,f,f,f":["高祖父","老太奶爷","老太爷","祖太爷","祖太爷爷","祖太公","高王父"],"f,f,f,f,f":["天祖父","高祖"],"f,f,f,f,f,f":["烈祖父","烈祖"],"f,f,f,f,f,f,f":["太祖父","太祖"],"f,f,f,f,f,f,f,f":["远祖父","远祖"],"f,f,f,f,f,f,f,f,f":["鼻祖父","鼻祖","始祖"],"f,f,f,f,f,f,f,f,f,ob":["伯鼻祖父"],"f,f,f,f,f,f,f,f,f,ob,w":["伯鼻祖母"],"f,f,f,f,f,f,f,f,f,lb":["叔鼻祖父"],"f,f,f,f,f,f,f,f,f,lb,w":["叔鼻祖母"],"f,f,f,f,f,f,f,f,f,xs":["姑鼻祖母"],"f,f,f,f,f,f,f,f,f,xs,h":["姑鼻祖父"],"f,f,f,f,f,f,f,f,m":["鼻祖母"],"f,f,f,f,f,f,f,f,m,xb":["舅鼻祖父"],"f,f,f,f,f,f,f,f,m,xb,w":["舅鼻祖母"],"f,f,f,f,f,f,f,f,m,xs":["姨鼻祖母"],"f,f,f,f,f,f,f,f,m,xs,h":["姨鼻祖父"],"f,f,f,f,f,f,f,f,ob":["伯远祖父"],"f,f,f,f,f,f,f,f,ob,w":["伯远祖母"],"f,f,f,f,f,f,f,f,lb":["叔远祖父"],"f,f,f,f,f,f,f,f,lb,w":["叔远祖母"],"f,f,f,f,f,f,f,f,xs":["姑远祖母"],"f,f,f,f,f,f,f,f,xs,h":["姑远祖父"],"f,f,f,f,f,f,f,m":["远祖母"],"f,f,f,f,f,f,f,m,xb":["舅远祖父"],"f,f,f,f,f,f,f,m,xb,w":["舅远祖母"],"f,f,f,f,f,f,f,m,xs":["姨远祖母"],"f,f,f,f,f,f,f,m,xs,h":["姨远祖父"],"f,f,f,f,f,f,f,ob":["伯太祖父"],"f,f,f,f,f,f,f,ob,w":["伯太祖母"],"f,f,f,f,f,f,f,lb":["叔太祖父"],"f,f,f,f,f,f,f,lb,w":["叔太祖母"],"f,f,f,f,f,f,f,xs":["姑太祖母"],"f,f,f,f,f,f,f,xs,h":["姑太祖父"],"f,f,f,f,f,f,m":["太祖母"],"f,f,f,f,f,f,m,xb":["舅太祖父"],"f,f,f,f,f,f,m,xb,w":["舅太祖母"],"f,f,f,f,f,f,m,xs":["姨太祖母"],"f,f,f,f,f,f,m,xs,h":["姨太祖父"],"f,f,f,f,f,f,ob":["伯烈祖父"],"f,f,f,f,f,f,ob,w":["伯烈祖母"],"f,f,f,f,f,f,lb":["叔烈祖父"],"f,f,f,f,f,f,lb,w":["叔烈祖母"],"f,f,f,f,f,f,xs":["姑烈祖母"],"f,f,f,f,f,f,xs,h":["姑烈祖父"],"f,f,f,f,f,m":["烈祖母Line truncated
|
||||
!function(s,f){"object"==typeof module&&module.exports?module.exports=f():s.relationship=f()}("undefined"!=typeof window?window:this,function(){var e=[{exp:/^(.+)&o([^#]+)&l/g,str:"$1$2"},{exp:/^(.+)&l([^#]+)&o/g,str:"$1$2"},{exp:/^(.+)?,o([sb])([^#]+)&l/g,str:"$1,x$2$3"},{exp:/^(.+)?,l([sb])([^#]+)&o/g,str:"$1,x$2$3"},{exp:/(,[ds],(.+),[ds])&[ol]/g,str:"$1"},{exp:/(,o[sb])+(,o[sb])/,str:"$2"},{exp:/(,l[sb])+(,l[sb])/,str:"$2"},{exp:/^(.*)(,[fh1])(,[olx][sb])+,[olx]b(.*)$/,str:"$1$2,xb$4#$1$2$4"},{exp:/^(.*)(,[mw0])(,[olx][sb])+,[olx]s(.*)$/,str:"$1$2,xs$4#$1$2$4"},{exp:/(,[fh1])(,[olx][sb])+,[olx]s/g,str:"$1,xs"},{exp:/(,[mw0])(,[olx][sb])+,[olx]b/g,str:"$1,xb"},{exp:/^,[olx][sb],[olx]b(.+)?$/,str:"$1#,xb$1"},{exp:/^,[olx][sb],[olx]s(.+)?$/,str:"$1#,xs$1"},{exp:/^,x([sb])$/,str:",o$1#,l$1"},{exp:/m,h/g,str:"f"},{exp:/f,w/g,str:"m"},{exp:/,[xol][sb](,[mf])/g,str:"$1"},{exp:/,[mf],d&([ol])/,str:",$1s"},{exp:/,[mf],s&([ol])/,str:",$1b"},{exp:/^(.*)(,[fh1]|[xol]b),[mf],s(.*)$/,str:"$1$2,xb$3#$1$2$3"},{exp:/^(.*)(,[mw0]|[xol]s),[mf],d(.*)$/,str:"$1$2,xs$3#$1$2$3"},{exp:/(,[mw0]|[xol]s),[mf],s/,str:"$1,xb"},{exp:/(,[fh1]|[xol]b),[mf],d/,str:"$1,xs"},{exp:/^,[mf],s(.+)?$/,str:",1$1#,xb$1"},{exp:/^,[mf],d(.+)?$/,str:",0$1#,xs$1"},{exp:/,[ds]&o,ob/g,str:",s&o"},{exp:/,[ds]&o,os/g,str:",d&o"},{exp:/,[ds]&l,lb/g,str:",s&l"},{exp:/,[ds]&l,ls/g,str:",d&l"},{exp:/,[ds](&[ol])?,[olx]s/g,str:",d"},{exp:/,[ds](&[ol])?,[olx]b/g,str:",s"},{exp:/(,[mwd0](&[ol])?|[olx]s),[ds](&[ol])?,m/g,str:"$1"},{exp:/(,[mwd0](&[ol])?|[olx]s),[ds](&[ol])?,f/g,str:"$1,h"},{exp:/(,[fhs1](&[ol])?|[olx]b),[ds](&[ol])?,f/g,str:"$1"},{exp:/(,[fhs1](&[ol])?|[olx]b),[ds](&[ol])?,m/g,str:"$1,w"},{exp:/^,[ds],m(.+)?$/,str:"$1#,w$1"},{exp:/^,[ds],f(.+)?$/,str:"$1#,h$1"},{exp:/,[wh](,[ds])/g,str:"$1"},{exp:/,w,h|,h,w/g,str:""},{exp:/(.+)?\[([^\|]+?)\|([^\[\]]*\|[^\[\]]*)\](.+)?/g,str:"$1$2$4#$1[$3]$4"},{exp:/(.+)?\[([^\[\]\|]+?)\|([^\[\]\|]+?)?\](.+)?/g,str:"$1$2$4#$1$3$4"}],h={"":["自己","我","本人","在下"],"[f,f|f,m|m,f|m,m]":["祖辈"],"[f,f|f,m]":["祖父母","爷爷奶奶"],"[m,f|m,m]":["外祖父母","外公外婆","姥姥姥爷"],"[f|m]":["父母","爹娘","爹妈","爸妈","爸爸妈妈","双亲","二亲","两亲","二老","高堂"],"[h,f|h,m]":["公婆","翁姑","大家官","公公婆婆"],"[w,f|w,m]":["岳父母","岳父岳母"],"[xb|xs]":["兄弟姐妹","同胞","手足"],"[f,xb,s&o|f,xb,s&l]":["堂兄弟","叔伯兄弟"],"[f,xb,d&o|f,xb,d&l]":["堂姐妹","叔伯姐妹"],"[m,xs,s&o|m,xs,s&l]":["姨兄弟"],"[m,xs,d&o|m,xs,d&l]":["姨姐妹"],"[f,xs,s&o|f,xs,s&l|m,xb,s&o|m,xb,s&l]":["表兄弟"],"[f,xs,d&o|f,xs,d&l|m,xb,d&o|m,xb,d&l]":["表姐妹"],"[ob|os]":["哥哥姐姐"],"[lb|ls]":["弟弟妹妹"],"[s|d]":["子女","儿女","小孩","孩子","孩子们","孩儿","宝宝","宝贝","娃","儿辈","子辈"],"[s,s|s,d|d,s|d,d]":["孙辈"],"[s|d|s,s|s,d|d,s|d,d]":["儿孙","子孙"],f:["爸爸","父亲","老爸","阿爸","阿爹","老窦","爸","父","爹","爹爹","爹地","爹啲","老爹","大大","老爷子"],"f,f":["爷爷","祖父","奶爷","阿爷","阿公","吖爷","老爷"],"f,f,f":["曾祖父","曾祖","太公","太爷","太爷爷","祖公","祖奶爷","太老爷"],"f,f,f,f":["高祖父","老太奶爷","老太爷","祖太爷","祖太爷爷","祖太公","高王父"],"f,f,f,f,f":["天祖父","高祖"],"f,f,f,f,f,f":["烈祖父","烈祖"],"f,f,f,f,f,f,f":["太祖父","太祖"],"f,f,f,f,f,f,f,f":["远祖父","远祖"],"f,f,f,f,f,f,f,f,f":["鼻祖父","鼻祖","始祖"],"f,f,f,f,f,f,f,f,f,ob":["伯鼻祖父"],"f,f,f,f,f,f,f,f,f,ob,w":["伯鼻祖母"],"f,f,f,f,f,f,f,f,f,lb":["叔鼻祖父"],"f,f,f,f,f,f,f,f,f,lb,w":["叔鼻祖母"],"f,f,f,f,f,f,f,f,f,xs":["姑鼻祖母"],"f,f,f,f,f,f,f,f,f,xs,h":["姑鼻祖父"],"f,f,f,f,f,f,f,f,m":["鼻祖母"],"f,f,f,f,f,f,f,f,m,xb":["舅鼻祖父"],"f,f,f,f,f,f,f,f,m,xb,w":["舅鼻祖母"],"f,f,f,f,f,f,f,f,m,xs":["姨鼻祖母"],"f,f,f,f,f,f,f,f,m,xs,h":["姨鼻祖父"],"f,f,f,f,f,f,f,f,ob":["伯远祖父"],"f,f,f,f,f,f,f,f,ob,w":["伯远祖母"],"f,f,f,f,f,f,f,f,lb":["叔远祖父"],"f,f,f,f,f,f,f,f,lb,w":["叔远祖母"],"f,f,f,f,f,f,f,f,xs":["姑远祖母"],"f,f,f,f,f,f,f,f,xs,h":["姑远祖父"],"f,f,f,f,f,f,f,m":["远祖母"],"f,f,f,f,f,f,f,m,xb":["舅远祖父"],"f,f,f,f,f,f,f,m,xb,w":["舅远祖母"],"f,f,f,f,f,f,f,m,xs":["姨远祖母"],"f,f,f,f,f,f,f,m,xs,h":["姨远祖父"],"f,f,f,f,f,f,f,ob":["伯太祖父"],"f,f,f,f,f,f,f,ob,w":["伯太祖母"],"f,f,f,f,f,f,f,lb":["叔太祖父"],"f,f,f,f,f,f,f,lb,w":["叔太祖母"],"f,f,f,f,f,f,f,xs":["姑太祖母"],"f,f,f,f,f,f,f,xs,h":["姑太祖父"],"f,f,f,f,f,f,m":["太祖母"],"f,f,f,f,f,f,m,xb":["舅太祖父"],"f,f,f,f,f,f,m,xb,w":["舅太祖母"],"f,f,f,f,f,f,m,xs":["姨太祖母"],"f,f,f,f,f,f,m,xs,h":["姨太祖父"],"f,f,f,f,f,f,ob":["伯烈祖父"],"f,f,f,f,f,f,ob,w":["伯烈祖母"],"f,f,f,f,f,f,lb":["叔烈祖父"],"f,f,f,f,f,f,lb,w":["叔烈祖母"],"f,f,f,f,f,f,xs":["姑烈祖母"],"f,f,f,f,f,f,xs,h":["姑烈祖父"],"f,f,f,f,f,m"Line truncated
|
||||
+1
-1
@@ -16,7 +16,7 @@
|
||||
<script type="text/javascript">
|
||||
setTimeout(function(){
|
||||
if(location.hostname.indexOf('passer-by.com')==-1){
|
||||
location.href = 'http://passer-by.com/';
|
||||
// location.href = 'http://passer-by.com/';
|
||||
}else if( window.top != window.self ) {
|
||||
window.top.location = self.location.href;
|
||||
}
|
||||
|
||||
+40
-21
@@ -205,7 +205,7 @@
|
||||
'[f,xs,d&o|f,xs,d&l|m,xb,d&o|m,xb,d&l]':['表姐妹'],
|
||||
'[ob|os]':['哥哥姐姐'],
|
||||
'[lb|ls]':['弟弟妹妹'],
|
||||
'[s|d]':['子女','儿女','小孩','孩子','孩儿','宝宝','宝贝','娃','儿辈','子辈'],
|
||||
'[s|d]':['子女','儿女','小孩','孩子','孩子们','孩儿','宝宝','宝贝','娃','儿辈','子辈'],
|
||||
'[s,s|s,d|d,s|d,d]':['孙辈'],
|
||||
'[s|d|s,s|s,d|d,s|d,d]':['儿孙','子孙'],
|
||||
// 本家
|
||||
@@ -2605,42 +2605,61 @@
|
||||
// 合并选择器,查找两个对象之间的关系
|
||||
function mergeSelector(from,to,my_sex){
|
||||
if(my_sex<0){
|
||||
if(from.match(/^,w/)||from.match(/^,1/)||to.match(/^,w/)||to.match(/^,1/)){
|
||||
my_sex = 1;
|
||||
}else if(from.match(/^,h/)||from.match(/^,0/)||to.match(/^,h/)||to.match(/^,0/)){
|
||||
my_sex = 0;
|
||||
var to_sex = -1;
|
||||
var from_sex = -1;
|
||||
if(from.match(/^,w/)||from.match(/^,1/)){
|
||||
from_sex = 1;
|
||||
}
|
||||
if(from.match(/^,h/)||from.match(/^,0/)){
|
||||
from_sex = 0;
|
||||
}
|
||||
if(to.match(/^,w/)||to.match(/^,1/)){
|
||||
to_sex = 1;
|
||||
}
|
||||
if(to.match(/^,h/)||to.match(/^,0/)){
|
||||
to_sex = 0;
|
||||
}
|
||||
if(from_sex==-1&&to_sex>-1){
|
||||
my_sex = to_sex;
|
||||
}else if(from_sex>-1&&to_sex==-1){
|
||||
my_sex = from_sex;
|
||||
}else if(from_sex==to_sex){
|
||||
my_sex = from_sex;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
var sex = my_sex;
|
||||
var from_ids = selector2id(from,my_sex);
|
||||
var to_ids = selector2id(to,my_sex);
|
||||
var r_ids = [];
|
||||
var from_rids = [];
|
||||
var to_rids = [];
|
||||
if(to){
|
||||
var isMale = false;
|
||||
var isFemale = false;
|
||||
var toIsMale = false;
|
||||
var toIsFemale = false;
|
||||
to_ids.forEach(function(id){
|
||||
if(id.match(/([fhs1](&[ol])?|[olx]b)$/)){
|
||||
isMale = true;
|
||||
toIsMale = true;
|
||||
}
|
||||
if(id.match(/([mwd0](&[ol])?|[olx]s)$/)){
|
||||
isFemale = true;
|
||||
toIsFemale = true;
|
||||
}
|
||||
r_ids = r_ids.concat(reverseId(id,my_sex));
|
||||
to_rids = to_rids.concat(reverseId(id,my_sex));
|
||||
});
|
||||
r_ids = unique(r_ids);
|
||||
if(isMale&&isFemale){
|
||||
to_rids = unique(to_rids);
|
||||
if(toIsMale&&toIsFemale){
|
||||
sex = -1;
|
||||
}else if(isMale){
|
||||
}else if(toIsMale){
|
||||
sex = 1;
|
||||
}else if(isFemale){
|
||||
}else if(toIsFemale){
|
||||
sex = 0;
|
||||
}
|
||||
}else{
|
||||
r_ids = [''];
|
||||
to_rids = [''];
|
||||
}
|
||||
// console.log('[from_ids]',from_ids,'r_ids',r_ids);
|
||||
// console.log('[from_ids]',from_ids,'to_rids',to_rids);
|
||||
var from_selector = from_ids.length>1?'['+from_ids.join('|')+']':from_ids[0];
|
||||
var to_selector = r_ids.length>1?'['+r_ids.join('|')+']':r_ids[0];
|
||||
var to_selector = to_rids.length>1?'['+to_rids.join('|')+']':to_rids[0];
|
||||
return {
|
||||
'selector':(to?','+to_selector:'')+(from?','+from_selector:''),
|
||||
'sex':sex
|
||||
@@ -2669,13 +2688,13 @@
|
||||
if(!to_selectors.length){
|
||||
to_selectors = [''];
|
||||
}
|
||||
console.log('[selectors]',from_selectors,to_selectors);
|
||||
// console.log('[selectors]',from_selectors,to_selectors);
|
||||
var result = []; //匹配结果
|
||||
from_selectors.forEach(function(from){
|
||||
to_selectors.forEach(function(to){
|
||||
var data = mergeSelector(from,to,options.sex);
|
||||
console.log('[data]',data);
|
||||
var ids = selector2id(data['selector'],data['sex']);
|
||||
// console.log('[data]',from,to,data);
|
||||
var ids = data?selector2id(data['selector'],data['sex']):null;
|
||||
// console.log('[ids]',data['selector'],data['sex'],ids);
|
||||
if(ids){
|
||||
ids.forEach(function(id){
|
||||
|
||||
+1
-1
@@ -25,6 +25,6 @@ test('relationship.js show to be tested', function (t) {
|
||||
t.deepEqual(relationship({text:'爸爸的哥哥的弟弟的儿子'}),['堂哥','堂弟','兄弟','自己']);
|
||||
t.deepEqual(relationship({text:'外婆',target:'女婿',reverse:true}),['外曾孙女婿','外曾外孙女婿']);
|
||||
t.deepEqual(relationship({text:'我',target:'爸爸'}),['儿子','女儿']);
|
||||
|
||||
t.deepEqual(relationship({text:'爱人',target:'娘家侄子'}),['姑丈']);
|
||||
t.end();
|
||||
});
|
||||
Reference in new issue
Block a user