在这种情况下,我必须将字符串拆分成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’
有人能帮我吗?
发布于 2018-06-05 08:46:41
只需将文本部分(\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");
发布于 2018-06-05 09:04:50
您可以创建匹配和捕获所有比较运算符的模式,或者在每个+、/、*和-运算符之前匹配一个位置,并在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);
}
模式细节
([<>!=]=|[=<>]) - Group 1(此值将是结果数组的一部分):<、>、!、=后面跟着=或=、<或> char| -或(?=[-+\/*]) -跟着-、+、/或*的位置。注意:.filter(Boolean)将从结果数组中删除空项。
https://stackoverflow.com/questions/50695761
复制相似问题