使用带有开头> = |< = | = |< |> | \!=的正则表达式进行字符串拆分以及字符串加增量值

时间:2018-06-05 08:39:07

标签: javascript regex regex-group

我的情况是我必须将字符串拆分为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');

当前输出[&#39;&lt; =&#39;,&#39; Mindate + 45&#39;] 预期输出[&#39;&lt; =&#39;,&#39; Mindate&#39;,&#39; + 45&#39;]

任何人都可以帮我吗?

2 个答案:

答案 0 :(得分:2)

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

&#13;
&#13;
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");
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您可以创建一个匹配并捕获所有比较运算符的模式,或者匹配每个+/*和{之前的地点{1}}运算符,并使用-方法中的表达式:

String#split

参见JS演示:

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

模式详情

  • 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组(此值将成为结果数组的一部分):([<>!=]=|[=<>])<>!后跟{{ 1}}或===字符
  • < - 或
  • > - 跟随|(?=[-+\/*])-+的位置。

注意:/将从结果数组中删除空项。