用javascript编写查询解析器

用javascript编写查询解析器,javascript,regex,parsing,Javascript,Regex,Parsing,我正在尝试编写一个解析器,它支持以下类型的查询子句 发件人:一个人 地址:特定公司 位置:此人的位置 因此,示例查询将类似于- from:Alpha at:Procter And Gamble location:US 如何用javascript编写这个通用解析器。此外,我还考虑在查询中包含AND运算符,如 from:Alpha AND at:Procter And Gamble AND location:US 但是,这将与任何字段(宝洁)中的标准值冲突。使用“;”等字符代替And,然后调用这

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

发件人:一个人
地址:特定公司
位置:此人的位置

因此,示例查询将类似于-

from:Alpha at:Procter And Gamble location:US
如何用javascript编写这个通用解析器。此外,我还考虑在查询中包含AND运算符,如

from:Alpha AND at:Procter And Gamble AND location:US
但是,这将与任何字段(宝洁)中的标准值冲突。

使用“;”等字符代替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,数组[1]=prop value

var query='from:Alpha;在:宝洁;地点:美国";;
var result=query.split(“;”).map(v=>v.split(“:”);
控制台日志(结果);

在以下位置对查询进行分析:在:位置:
您可以这样做:

const regex=/from:\s*(.*)\s*在:\s*(.*)\s*位置:\s*(.*)\s**/
const querytobj=query=>{
const[,from,at,location]=regex.exec(查询)
返回{from,at,location}
}

console.log(querytobj(“from:Alpha at Betaat:Procter And Gamble location:US”)
请包含到目前为止的代码。您的语法设计得不是很好。作为一名运营商,如何期望能够分辨出与之间的区别,以及《宝洁》中的“与”?@torazaburo这就是我所处的两难境地。。因为我希望使用布尔AND运算符来组合这些子句。我尝试使用“+”进行实验,但它也与我的数据集冲突,例如:c++我建议引用可能包含空格的值,如
“Project and Gamble”