我正在尝试编写支持以下类型的查询子句的解析器
来自:一个人 在:特定公司
location:该人的位置
所以示例查询就像 -
from:Alpha at:Procter And Gamble location:US
我如何在javascript中编写这个通用解析器。此外,我正在考虑在
等查询中包含AND运算符from:Alpha AND at:Procter And Gamble AND location:US
但是,这会与任何领域(宝洁公司)的标准值发生冲突
答案 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;"))