我的情况是我必须将字符串拆分为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;]
任何人都可以帮我吗?
答案 0 :(得分:2)
您只需要将文字部分(\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");
&#13;
答案 1 :(得分:1)
您可以创建一个匹配并捕获所有比较运算符的模式,或者匹配每个+
,/
,*
和{之前的地点{1}}运算符,并使用-
方法中的表达式:
String#split
参见JS演示:
a.split(/([<>!=]=|[=<>])|(?=[-+\/*])/).filter(Boolean)
&#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}}或=
,=
或=
字符<
- 或>
- 跟随|
,(?=[-+\/*])
,-
或+
的位置。注意:/
将从结果数组中删除空项。