使用正则表达式拆分的字符串以 >=|<=|=|<|>|\!= 和字符串加增量值

String split using regex with beginning >=|<=|=|<|>|\!= And a string plus incremental value

我遇到必须将字符串拆分为 3 个子字符串的情况。

示例

<=Mindate+30 >>> [<=,Mindate,+30]
<=Mindate  >>>  [<=,Mindate]
>=Maxdate-3 >>> [>=,Maxdate,-3]
==Date  >>>  [==,Date]

我创建了一个将当前数组一分为二的函数

function splitString(str){  
var a= /(>=|<=|=|<|>|\!=)|.+/g
return str.match(a);
}
splitString('<=Mindate+45');

当前输出['<=', 'Mindate+45'] 预期输出 ['<=', 'Mindate', '+45']

谁能帮我解决这个问题?

您只需要将文本部分 (\w+) 与数字部分 ([-+]\d+) 分开:

function splitToThree(input) {
  let regex = /(>=|<=|==|<|>|\!=)|\w+|[-+]\d+/g;
  let ans = input.match(regex);
  console.log(ans);
}

splitToThree("<=Mindate+30");
splitToThree("<=Mindate");
splitToThree(">=Maxdate-3");
splitToThree("==Date");

您可以创建一个模式来匹配 并捕获 所有比较运算符或匹配每个 +/、[= 之前​​的位置14=] 和 - 运算符,并在 String#split 方法中使用表达式:

a.split(/([<>!=]=|[=<>])|(?=[-+\/*])/).filter(Boolean)

查看 JS 演示:

var strs = ['<=Mindate+30', '<=Mindate','>=Maxdate-3','==Date','>=SomeFn-3.45'];
rx = /([<>!=]=|[=<>])|(?=[-+\/*])/;
for (var a of strs) {
  var res = a.split(rx).filter(Boolean);
  console.log(a, "=>", res);
}

图案详情

  • ([<>!=]=|[=<>]) - 第 1 组(此值将成为结果数组的一部分):<>!= 后跟==<> char
  • | - 或
  • (?=[-+\/*]) - 后跟 -+/*.
  • 的位置

注意:.filter(Boolean) 将从结果数组中删除空项。