2015-08-28 3 views
-3

Допустим, у меня есть строка:JS PREG матч вместо «для» петли

11-34-23|12-67|12-67-87-65 

И я хочу, чтобы получить несколько массив как:

[['11','34','23'],['12','67'],['12','67','87','65']] 

Есть ли способ, чтобы создать несколько массив, regex, избегая цикла FOR?

+0

no Вызов RegExp() выводит массив массивов, поэтому вам нужно выполнить итерацию, используя для, карту или любой другой метод. – dandavis

ответ

2

Если вы уверены, что будете раскалываться по трубам, а затем тире, тогда String.split будет генерировать массив, и Array.map будет итерации по каждой части.

Например:

"11-34-23|12-67|12-67-87-65" 
    .split('|') 
    .map(function(item) { 
     return item.split('-'); 
    }); 
0

Если вы должны использовать регулярные выражения, вы можете использовать (глобальный) модификатор g возвращает массив всех совпадений.

var result = "11-34-23|12-67|12-67-87-65".match(/[^|]+/g).map(function(item) { 
 
    return item.match(/[^-]+/g); 
 
}); 
 
alert(JSON.stringify(result));

Первое регулярное выражение соответствует всем строкам, которые не имеют | в них, так что он разбивает строку с использованием этого разделителя. Второе регулярное выражение применяется к каждой из этих подстрок и соответствует любому, кроме -, поэтому оно разделяет строку вверх с использованием этого разделителя.

Но было бы понятнее, если бы вы только использовали split, как в другом ответе.

Смежные вопросы