Mam taki ciąg taki:

var category = 'New & improved > crazy - whatever'

Chciałbym przewrócić go na:

var arr = ['New', 'improved', 'crazy', 'whatever']

Powinien pracować z dowolną kombinacją ' & ', ' - ' or ' > ' (zawarte spacje).

Póki co robię:

var arr = [];
    if(obj.categories[i].name.indexOf(" > ") >= 0){
        var arr2 = obj.categories[i].name.split(" > ");
        for(var i = 0; i<arr.length; i++){
            if (arr[i].indexOf(' & ') >=0){
                var newarr = arr[i].split(' & ');
                arr.push(newarr);
            }else{
                arr.push(arr[i]);
            }
        }
    }

    if(obj.categories[i].name.indexOf(" - ") >= 0){
        var arr2 = obj.categories[i].name.split(" - ");
        for(var i = 0; i<arr.length; i++){
            if (arr[i].indexOf(' & ') >=0){
                var newarr = arr[i].split(' & ');
                arr.push(newarr);
            }else{
                arr.push(arr[i]);
            }
        }
    }else if(obj.categories[i].name.indexOf(" & ") >= 0){
        var arr = obj.categories[i].name.split(" & ");
        return arr;
    }else{
        return [obj.categories[i].name];
    }

Ale to nie działa, jeśli w ciągu są zarówno ampersands, jak i kreski. Mam ochotę na to, że REGEX może sobie poradzić z tym lepszym, co jest najlepszym sposobem, aby osiągnąć to i uczynić go stosunkowo przyszłości dla różnych przypadków użytkowania (tylko z udziałem powyższych separatorów)?

1
JVG 25 listopad 2013, 17:31

4 odpowiedzi

Najlepsza odpowiedź
var category = 'New & improved > crazy - whatever';
category.split(/\s*[-&>]\s*/); // => ["New", "improved", "crazy", "whatever"]

Uwaga: - nie powinien być w środku. W przeciwnym razie jest interpretowany jako zakres znaków.

3
falsetru 25 listopad 2013, 13:34

Spróbuj:
. 'New & improved > crazy - whatever'.split(/[>&-]/);

Lub bez spacji w wyniku (ale wynik może zależeć od formatowania ciągu początkowego):
'New & improved > crazy - whatever'.split(/\s+[>&-]\s+/);

2
KooiInc 25 listopad 2013, 13:33

Możesz użyć tego:

var result = yourstring.split(/[\s>&-]+/);

print(result);
0
Casimir et Hippolyte 25 listopad 2013, 13:36
var category = 'New & improved > crazy - whatever'
var arr = category.split(/[\&\>\-]/);
0
Chris Wheeler 25 listopad 2013, 13:37