在javascript中编写查询解析器

时间:2017-02-11 04:38:55

标签: javascript regex parsing

我正在尝试编写支持以下类型的查询子句的解析器

  来自:一个人   在:特定公司
  location:该人的位置

所以示例查询就像 -

from:Alpha at:Procter And Gamble location:US

我如何在javascript中编写这个通用解析器。此外,我正在考虑在

等查询中包含AND运算符
from:Alpha AND at:Procter And Gamble AND location:US

但是,这会与任何领域(宝洁公司)的标准值发生冲突

2 个答案:

答案 0 :(得分:1)

使用像“;”这样的字符而不是AND,然后调用这些函数:

var query = 'from:Alpha;at:Procter And Gamble;location:US';
var result = query.split(';').map(v => v.split(':'));
console.log(result);

然后你将拥有一对数组,其中数组[0] = prop name和array [1] = prop value

var query = 'from:Alpha;at:Procter And Gamble;location:US';
var result = query.split(';').map(v => v.split(':'));
console.log(result);
    

答案 1 :(得分:0)

假设您的查询总是如下所示:at:location:
你可以这样做:



const regex = /from:\s*(.*?)\s*at:\s*(.*?)\s*location:\s*(.*)\s*/
const queryToObj = query => {
  const [,from,at,location] = regex.exec(query)
  return {from,at,location}
}
console.log(queryToObj("from:Alpha at Betaat:         Procter And Gamble location:          US"))




但是,添加终结符可以让您混合顺序并降低一些关键字:



const regex = /(\w+):\s*(.*?)\s*;/g
const queryToObj = query => {
  const obj = {}
  let temp
  while(temp = regex.exec(query)){
    let [,key,value] = temp
    obj[key] = value
  }
  return obj
}
console.log(queryToObj("from:Alpha at Beta;at:Procter And Gamble;location:US;"))
console.log(queryToObj("at:Procter And Gamble;location:US;from:Alpha at Beta;"))
console.log(queryToObj("from:Alpha at Beta;"))