1

我正在尝试使用 javascript 中的正则表达式将字符串转换为表达式。假设我们有一个字符串。

let element = "id == 123 and status IN ('Active','null')".

我需要找到这个字符串有空值,如果它现在转换为下面的表达式

id == 123 and status IN ('Active') or status is null.

我尝试使用此函数,但在为 null之前无法附加状态,因为我希望它动态附加

expressionFunc = (element) => {
  if(element.includes('null')) return `${element1.replace(new RegExp(",?'null',?"),'')} or is null`
};
4

2 回答 2

1

对于您的示例字符串,您可以捕获组中状态的值、组中“null”之前的部分和组中“null”之后的部分,并在替换中使用这些组。

(\S+)(\s+IN\s+\(.*?),?\s*'null'(.*?\))

部分图案:

  • (\S+)捕获组 1,匹配 1+ 非空白字符
  • (捕获组 2
    • \s+IN\s+\(.*?匹配 IN (后跟尽可能少的字符
  • ),?关闭第 2 组并匹配可选逗号
  • \s*'null'匹配'null'前面有可选的空白字符
  • (.*?\))尽可能少地捕获第 3 组匹配,直到)

正则表达式演示

并替换为

$1$2$3 or $1 is null

const expressionFunc = e =>
  e.replace(
    /(\S+)(\s+IN\s+\(.*?),?'null'(.*?\))/g,
    `$1$2$3 or $1 is null`
  );
const element = `id == 123 and status IN ('Active','null')`;
console.log(expressionFunc(element));

于 2020-10-19T19:04:07.557 回答
0

如果您没有任何额外条件,则以下代码将按预期工作。

let element = "id == 123 and status IN ('Active','null')";
if(element.includes('null')) {
  let ret = element.replace('\,\'null\'', "") + " or status is null";
  console.log(ret);
}

于 2020-10-19T13:09:28.157 回答