字符串分隔成数组

问题描述

字符串分隔成数组,由于空格处过多,没有特别好的思路

当前实现方法

我觉得现在的实现方法实在有点麻烦
var str = 'sourceIp == 86.248.198.93 && sourceIp != 86.248.198.93 || sourceIp == 86.248.198.93 || sourceIp != 86.248.198.93 && sourceIp == 86.248.198.93:737 && sourceIp != 86.248.198.93:737 || sourceIp == 86.248.198.93:737 || sourceIp != 86.248.198.93:737'
var arr = str.split(' ')
var newArr = ['']
arr.forEach(item => {
    let oldValue = newArr[newArr.length-1].trim()
    if(item === '&&' || item === '||') {
        newArr.push(item)
    } else {
        newArr[newArr.length-1] = oldValue + ' ' + item
    }
})

相关代码

'sourceIp == 86.248.198.93 && sourceIp != 86.248.198.93 || sourceIp == 86.248.198.93 || sourceIp != 86.248.198.93 && sourceIp == 86.248.198.93:737 && sourceIp != 86.248.198.93:737 || sourceIp == 86.248.198.93:737 || sourceIp != 86.248.198.93:737'

你期待的结果是什么?实际看到的错误信息又是什么?

["sourceIp == 86.248.198.93", "&& sourceIp != 86.248.198.93", "|| sourceIp == 86.248.198.93", "|| sourceIp != 86.248.198.93", "&& sourceIp == 86.248.198.93:737", "&& sourceIp != 86.248.198.93:737", "|| sourceIp == 86.248.198.93:737", "|| sourceIp != 86.248.198.93:737"]
阅读 1.5k
2 个回答
var str = 'sourceIp == 86.248.198.93 && sourceIp != 86.248.198.93 || sourceIp == 86.248.198.93 || sourceIp != 86.248.198.93 && sourceIp == 86.248.198.93:737 && sourceIp != 86.248.198.93:737 || sourceIp == 86.248.198.93:737 || sourceIp != 86.248.198.93:737';
    const s=str.split(/\s*(?=\|{2}|\&{2})/);
    console.log(s);

要这样?

const str = 'sourceIp == 86.248.198.93 && sourceIp != 86.248.198.93 || sourceIp == 86.248.198.93 || sourceIp != 86.248.198.93 && sourceIp == 86.248.198.93:737 && sourceIp != 86.248.198.93:737 || sourceIp == 86.248.198.93:737 || sourceIp != 86.248.198.93:737'

const arr = str.split(/\s+(?:&&|\|\|)\s+/)

console.log(arr)
推荐问题