Помощь по разбиению строки в JavaScript - PullRequest
3 голосов
/ 30 апреля 2010

Я бы задал вопрос о разбиении строки, как показано ниже:

Входная строка: a=>aa| b=>b||b | c=>cc

и вывод:

a=>aa
b=>b||b 
c=>cc

Коби ответил:

var matches = "a=>aa|b=>b||b|c=>cc".match(/(?:[^|]|\|\|)+/g)

Его ответ сработал, но мне нужно использовать метод .split() и сохранить результаты в массиве.

Так что я не могу использовать метод .match().

Как я могу это сделать?

Ответы [ 4 ]

2 голосов
/ 30 апреля 2010

Вот мой удар:

var str = 'a=>aa| b=>b||b | c=>cc';
var arr = str.split(/\s*\|\s+/);
console.log(arr)
// ["a=>aa", "b=>b||b", "c=>cc"]

var obj = {}; // if we want the "object format"
for (var i=0; i<arr.length; i++) {
  str=arr[i];
  var match = str.match(/^(\w+)=>(.*)$/);

  if (match) { obj[match[1]] = match[2]; }
}
console.log(obj);

// Object { a:"aa", b:"b||b", c: "cc" }

И RegExp:

/
 \s*   # Match Zero or more whitespace
 \|    # Match '|'
 \s+   # Match one or more whitespace (to avoid the ||)
/
1 голос
/ 02 мая 2010

Хотя я ненавижу спорить с собой, другое возможное решение:

var matches = 'a=>aa|b=>b||b|c=>cc'.split(/\b\s*\|\s*\b/g);

Значение: разделить, когда вы видите | в окружении пробелов и между буквенно-цифровыми символами.
Эта версия также не затрагивает d|=d.
\b может привести к ошибкам, но может не разделиться, если канал не состоит из буквенно-цифровых символов, например a=>(a+a)|b=>b не будет разделяться.

1 голос
/ 30 апреля 2010

.match также возвращает массив, поэтому проблем с использованием .match

нет.
arr = "a=>aa|b=>b||b|c=>cc".match(/(?:[^|]|\|\|)+/g)
// a=>aa,b=>b||b,c=>cc
arr.length
// 3
arr[0]
// a=>aa
0 голосов
/ 03 мая 2010

Я разместил это в другой копии этого вопроса (пожалуйста, не задавайте вопрос несколько раз!)

Это должно сделать это:

"a=>aa|b=>b||b|c=>cc".split(/\|(?=\w=>)/);

, что дает:

["a=>aa", "b=>b||b", "c=>cc"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...