我希望能够从重复模式中拆分字符串。举个例子:
id||eq||2,id||eq||1
会给我id||eq||2
和id||eq||1
这很容易,因为分隔符为,
。但不幸的是,我可以在分隔部分内放置分隔符:
id||eq||2,2,id||eq||1
我想得到id||eq||2,2
和id||eq||1
我尝试了类似这样的操作:(\w+\|{2}\w+\|{2}[\w,]+,?)
但是它总是占据下一组的第一部分,而不是第二组
id||eq||1,2,id||eq||2,1
我没主意,如果你们中的一些人可以帮助我?
编辑
更准确地说,我想从网址(并且网址中的参数已经是数组)中获取对象数组(将其称为RequestFilter [])。
对象RequestFilter看起来像这样:
field
,它是一个字符串,只能包含字母数字字符type
是一个枚举,只能包含字母数字字符filter
可以是任何字符(例如,
)在网址中给了我这个: ?filter [] = field || type || filter
今天,我已经从网址中获取了RequestFilter
,但是现在我必须获取一个RequestFilter
数组。我可以使用任何分隔符,但是由于属性filter
可以是任何东西,因此分割时总是有与其冲突的风险。
我可以拥有的一些字符串示例以及预期的RequestFilter []:
name||cont||pier
[{field: 'name', type: 'cont', filter: 'pier'}]
name||cont||a,id||in||2,3
[{field: 'name', type: 'cont', filter: 'pier'},{field: 'id', type: 'in', filter: '2,3'}]
id||in||2,3,4,5,address||eq||Paris,France
[{field: 'id', type: 'in', filter: '2,3,4,5'},{field: 'address', type: 'eq', filter: 'Paris,France'}]
编辑2
我非常确定可以使用正则表达式来处理它,但是如果您认为不可能,请告诉我,我将尝试找到另一种处理方法。
答案 0 :(得分:2)
使用否定超前断言的解决方案:
const str = 'id||eq||2,id||eq||1';
const str2 = 'id||eq||2,2,id||eq||1';
console.log(
str.split(/(?!,\d),/)
)
console.log(
str2.split(/(?!,\d),/)
)
答案 1 :(得分:1)
str = 'id||eq||2,2,id||eq||1'
splitted = str.split('id||eq||')
splitted.forEach(function(item, index, arr) {
arr[index]= 'id||eq||'+item;
})
splitted.shift()
console.log(splitted)
答案 2 :(得分:0)
您可以用',id'分割它,然后进行如下操作
let str='id||eq||2,2,id||eq||1'
//split by ',id'
let arr=str.split(',id');
//join with fixed pattern
let result=arr.join('___id');
//split with fix pattern again
let final_arr=result.split('___');
console.log(final_arr);