2013-11-25 2 views
0

У меня есть строка, как это:Javascript регулярное выражение для разделения на любой '&', '-' или '>'

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

я хотел бы, чтобы преобразовать его в:

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

Должен работать с любой комбинацией ' & ', ' - ' or ' > ' (пробелы включены).

До сих пор я делаю:

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]; 
    } 

, но это не работает, если есть оба амперсанды и тир в строке. Я чувствую, что регулярное выражение может справиться с этим намного лучше, так как это лучший способ достичь этого и сделать его относительно надежным для разных случаев использования (конечно, только с использованием вышеупомянутых разделителей)?

+3

' 'New & улучшенный> сумасшедший - whatever'.split (/ [&> -] /)' - тривиальное действительно. – Jon

+0

Обучение регулярному выражению упростит вашу жизнь – Buddha

ответ

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

Примечание: - не должно быть в середина. В противном случае это интерпретируется как диапазон символов.

2

Попытка:
'New & improved > crazy - whatever'.split(/[>&-]/);

или без пробелов в результате (но результат может зависеть от форматирования исходной строки):
'New & improved > crazy - whatever'.split(/\s+[>&-]\s+/);

0

Вы можете использовать это:

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

print(result); 
0
var category = 'New & improved > crazy - whatever' 
var arr = category.split(/[\&\>\-]/); 
Смежные вопросы