updated 正则一处bug修复,性别判断优化

This commit is contained in:
mumuy 2016-04-28 16:19:28 +08:00
parent a15d330b41
commit 98d8728380

View File

@ -1,7 +1,7 @@
/** /**
* BY: haole zheng * BY: haole zheng
* http://passer-by.com * http://passer-by.com
*/ */
(function(window){ (function(window){
//简写 //简写
var _filter = [ var _filter = [
@ -103,11 +103,11 @@
}, },
{//不知道性别,兄弟姐妹的兄弟是自己或兄弟 {//不知道性别,兄弟姐妹的兄弟是自己或兄弟
exp:/^,[olx][sb],[olx]b(.+)?$/, exp:/^,[olx][sb],[olx]b(.+)?$/,
str:',$1#,xb$1' str:'$1#,xb$1'
}, },
{//不知道性别,兄弟姐妹的姐妹是自己或姐妹 {//不知道性别,兄弟姐妹的姐妹是自己或姐妹
exp:/^,[olx][sb],[olx]s(.+)?$/, exp:/^,[olx][sb],[olx]s(.+)?$/,
str:',$1#,xs$1' str:'$1#,xs$1'
}, },
/* 孩子 */ /* 孩子 */
{//孩子的姐妹是自己的女儿(年龄判断) {//孩子的姐妹是自己的女儿(年龄判断)
@ -563,14 +563,16 @@
} }
//简化选择器 //简化选择器
function selector2id(selector){ function selector2id(selector,sex){
var result = []; var result = [];
var hash = {}; var hash = {};
var sex1 = sex2 = -1;//自己或对方性别:-1未知,0女性,1男性 var sex2 = -1; //对方性别:-1未知,0女性,1男性
if(sex<0){ //如果自己的性别不确定
if(selector.indexOf(',w')==0){ if(selector.indexOf(',w')==0){
sex1 = 1; sex = 1;
}else if(selector.indexOf(',h')==0){ }else if(selector.indexOf(',h')==0){
sex1 = 0; sex = 0;
}
} }
sex2 = selector.match(/,[mw]|([olx]s)|(d(&[ol]))$/)?0:1; sex2 = selector.match(/,[mw]|([olx]s)|(d(&[ol]))$/)?0:1;
var getId = function(selector){ var getId = function(selector){
@ -599,10 +601,11 @@
} }
} }
}while(s!=selector); }while(s!=selector);
// console.log('selector#',selector);
if(status){ if(status){
if(selector==''&&sex1>-1&&sex1!=sex2){
}else{
selector = selector.substr(1); //去前面逗号 selector = selector.substr(1); //去前面逗号
if(selector==''&&sex>-1&&sex!=sex2){
}else{
result.push(selector); result.push(selector);
} }
} }
@ -646,7 +649,9 @@
}else if(id.indexOf('&l')>-1){ }else if(id.indexOf('&l')>-1){
age = '&o'; age = '&o';
} }
if(id){
id = id.replace(/&[ol]/g,''); id = id.replace(/&[ol]/g,'');
sex = sex?1:0; //逆转运算自身性别必须确定
var sid = (','+sex+','+id).replace(/,[fhs]|,[olx]b/g,',1').replace(/,[mwd]|,[olx]s/g,',0'); var sid = (','+sex+','+id).replace(/,[fhs]|,[olx]b/g,',1').replace(/,[mwd]|,[olx]s/g,',0');
sid = sid.substring(0,sid.lastIndexOf(',')); sid = sid.substring(0,sid.lastIndexOf(','));
var id_arr = id.split(',').reverse(); var id_arr = id.split(',').reverse();
@ -657,11 +662,13 @@
} }
return arr.join(',')+age; return arr.join(',')+age;
} }
return '';
}
function relationship(parameter){ function relationship(parameter){
var options = { var options = {
text:'', text:'',
sex:1, sex:-1,
reverse:false reverse:false
}; };
for (var p in parameter) { for (var p in parameter) {
@ -671,7 +678,7 @@
// console.log('selectors#',selectors); // console.log('selectors#',selectors);
var result = []; //匹配结果 var result = []; //匹配结果
for(var i = 0;i<selectors.length;i++){ //遍历所有可能性 for(var i = 0;i<selectors.length;i++){ //遍历所有可能性
var ids = selector2id(selectors[i]); var ids = selector2id(selectors[i],options.sex);
// console.log('ids#',ids); // console.log('ids#',ids);
for(var j=0;j<ids.length;j++){ for(var j=0;j<ids.length;j++){
var id = ids[j]; var id = ids[j];
@ -708,7 +715,7 @@
window.relationship = relationship; window.relationship = relationship;
})(window); })(window);
// console.log(relationship('爸爸的妈妈的儿子')); // console.log(relationship({text:'姐姐的弟弟的女儿',sex:1,reverse:true}));
//老公的老婆的儿子的爸爸的老婆的儿子的爸爸 //老公的老婆的儿子的爸爸的老婆的儿子的爸爸
//我的三舅的儿子的爸爸的妹妹的儿子的叔叔的哥哥 //我的三舅的儿子的爸爸的妹妹的儿子的叔叔的哥哥
//老婆的外孙的姥姥 //老婆的外孙的姥姥