我正在尝试编写一种方法来搜索与C#的Linq之类的查询匹配的项目。
因此,例如:
myObj.query("name == 'Bob' and age >= 18");
因此,以为我认为最好的起点是参加每个小组,因此我首先分为and
和or
。这似乎给了我一半。
所以我这样做:
Object.prototype.query = function(string){
console.log(string.split(/(?=(and|or))/g));
};
问题是,我在控制台中得到了错误的输出:
0: "name == 'Bob' "
1: "and"
2: "and age >= 18"
我正在寻找类似这样的东西(注释2,它不再包含and
):
0: "name == 'Bob'"
1: "and"
2: "age >= 18"
我想我朝着正确的方向前进,我对regex的评价还不够好,那么我应该怎么做才能将这两个值分开但将其保留在输出中呢?
这是因为您使用的是正向超前修饰符。您还需要确保不捕获部分单词,因此我添加了一个空格定界符。/\s+(and|or)\s+/
如
"name == 'Bob' and age >= 18 and ornate=='lando'".split(/\s+(and|or)\s+/)
将工作,返回
["name == 'Bob'", "and", "age >= 18", "and", "ornate=='lando'"]
检查字符串中的“和”会有些棘手,但是使用您当前的替代方法(字符串或数字),它将可以正常工作 /\s+(and|or)\s+(?![\w\s]*')/
"name == 'Bob' and age >= 18 and ornate='me and lando'".split(/\s+(and|or)\s+(?![\w\s]*')/)
返回
["name == 'Bob'", "and", "age >= 18", "and", "ornate='me and lando'"]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句