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