Javascript разделяется только один раз и игнорирует остальные - PullRequest
8 голосов
/ 21 апреля 2011

Я анализирую некоторые пары ключ-значение, разделенные двоеточиями.У меня проблема в том, что в разделе значений есть двоеточия, которые я хочу игнорировать, но функция split все равно их забирает.отдельные строки, которые я пробовал line.split(/:/, 1), но они соответствовали только части значений данных.Затем я попытался line.split(/:/, 2), но это дало мне ['description', 'this string is not escaped'], и мне нужна вся строка.

Спасибо за помощь!

Ответы [ 5 ]

15 голосов
/ 21 апреля 2011
a = line.split(/:/);
key = a.shift();
val = a.join(':');
10 голосов
/ 21 апреля 2011

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

line.split(/: (.+)?/, 2);

2 голосов
/ 21 апреля 2011

Если вы предпочитаете альтернативу регулярному выражению, учтите следующее:

var split = line.split(':');
var key = split[0];
var val = split.slice(1).join(":");

Ссылка: split , slice , join .

0 голосов
/ 06 февраля 2018

Может быть, этот подход будет лучшим для такой цели:

var a = line.match(/([^:\s]+)\s*:\s*(.*)/);
var key = a[1];
var val = a[2];

Таким образом, вы можете использовать таблицы в ваших файлах конфигурации / данных такой структуры, а также не беспокоиться о пробелах до или после вашего имени-значитель-разделитель ':'.

Или вы можете использовать примитивные и быстрые строковые функции indexOf и substr для достижения вашей цели, как мне кажется, самым быстрым способом (по процессору и памяти)

for ( ... line ... ) {
    var delimPos = line.indexOf(':');
    if (delimPos <= 0) {
        continue; // Something wrong with this "line"
    }
    var key = line.substr(0, delimPos).trim();
    var val = line.substr(delimPos + 1).trim();

    // Do all you need with this  key: val
}
0 голосов
/ 28 сентября 2015

Чуть более элегантно:

a = line.match(/(.*?):(.*)/);
key = a[1];
val = a[2];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...