分割一个值,但将值保留在结果数组中

Split on a value but keep value in the result array

本文关键字:保留 结果 数组 一个 分割      更新时间:2023-09-26

我正在尝试编写一个方法来搜索与查询匹配的项目,如c#的Linq。

例如:

myObj.query("name == 'Bob' and age >= 18");

所以我认为最好的起点是得到每一组,所以首先我把andor分开。这似乎只给了我想要的一半。

所以我这样做:

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"

我认为我正朝着正确的方向前进,我只是不太好与正则表达式,所以我应该做些什么来分割两个值,但保持它们在输出?

这是因为您正在使用正向向前看修饰符。您还需要确保不捕获部分单词,因此我添加了一个空格分隔符。

中的/'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'"]

试试这个

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' ]