我正在尝试编写一种方法来搜索与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"
我认为我正朝着正确的方向发展,我对正则表达式并不是那么好,所以我该如何分割这两个值但是将它们保留在输出中呢?
答案 0 :(得分:4)
这是因为你正在使用正向前瞻修饰符。您还需要确保不要捕获部分单词,因此我添加了空格分隔符。
中的/\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'"]
检查字符串中的“and”会变得有点棘手,但是使用当前的替代方法(字符串或数字),这将有效/\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'"]
答案 1 :(得分:2)
试试这个
Object.prototype.query = function(string){
console.log(string.split(/\s+(and|or)\s+/g));
};
var myObj = {};
myObj.query("name == 'Bob' and age >= 18");
可生产
[ 'name == \'Bob\'', 'and', 'age >= 18' ]