如何从模式中拆分字符串

时间:2019-06-21 11:08:50

标签: javascript regex

我希望能够从重复模式中拆分字符串。举个例子: id||eq||2,id||eq||1 会给我id||eq||2id||eq||1

这很容易,因为分隔符为,。但不幸的是,我可以在分隔部分内放置分隔符:

id||eq||2,2,id||eq||1

我想得到id||eq||2,2id||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

我非常确定可以使用正则表达式来处理它,但是如果您认为不可能,请告诉我,我将尝试找到另一种处理方法。

3 个答案:

答案 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);