如何为标签实现AND/OR逻辑?

C B*_*uer 0 javascript tags ajax jquery logic

我有一个Web应用程序,向用户显示他们在特殊广告系列中的所有数据.这些广告系列可以使用不同的"标记"来保护其目的(增长,保留,忠诚度),而不仅仅是我在这里给出的.

我正在寻找的是一种允许更高级和智能用户创建AND/OR子句组的方法,这些子句允许他们专门查看针对其策略的某些广告系列.

我的标签很简单,基于索引的标题.我可以为用户生成广告系列列表,但我希望广告系列的实际过滤在用户端进行,因为他们可以下载广告系列.该网站还会包含"新"广告系列代码等内容.

因此,如果我有filterExpression"(保留+增长)|忠诚度",我应该看到所有标记有保留和增长或忠诚度的广告系列.

思考?

现在我的逻辑导致了双眼.

编辑:Psuedo-示例:

Growth OR Loyalty OR Retention
= 0|1|2

filterPass = [ [0], [1], [2] ]
CampaignTags = [ 1,4,5,6 ]
//This campaign passes because it has "1"


(Growth AND Loyalty) OR Retention
= (0+1)|2

filterPass = [ [0,1] , [2] ]
CampaignTags = [ 1,4,5,6 ]
//Fails because it doesn't have "0" AND "1", OR "2"
Run Code Online (Sandbox Code Playgroud)

Chr*_*ejo 5

  1. 如@dave所述,将表达式解析为中缀形式.
  2. 使用递归算法将其转换为析取范式,即所有|运算符都在顶层,所有+运算符都在其中.您上面给出的示例已经是这样的形式.粗略地说,您的算法应递归地查找表单的术语,x+(y|z)并用(x+y)|(x+z)嵌套的+s和|s 替换它们.
  3. 您现在可以检查一组标签是否与表达式匹配,方法是检查是否有任何析取物的标签全部贴在相关物品上.

或者,如果您需要速度,请查看BDD.