Разделение JavaScript представляет в виде строки на пространстве или на кавычках для выстраивания

var str = 'single words "fixed string of words"';
var astr = str.split(" "); // need fix

Я хотел бы, чтобы массив был похож на это:

var astr = ["single", "words", "fixed string of words"];
26
задан Remi 6 November 2019 в 10:48
поделиться

2 ответа

str.match(/\w+|"[^"]+"/g)

//single, words, "fixed string of words"
27
ответ дан 28 November 2019 в 06:30
поделиться

Здесь используется смесь разделения и регексного сопоставления.

var str = 'single words "fixed string of words"';
var matches = /".+?"/.exec(str);
str = str.replace(/".+?"/, "").replace(/^\s+|\s+$/g, "");
var astr = str.split(" ");
if (matches) {
    for (var i = 0; i < matches.length; i++) {
        astr.push(matches[i].replace(/"/g, ""));
    }
}

Это возвращает ожидаемый результат, хотя один regexp должен быть в состоянии сделать все это.

// ["single", "words", "fixed string of words"]

Обновление А это улучшенная версия метода, предложенного S.Mark

var str = 'single words "fixed string of words"';
var aStr = str.match(/\w+|"[^"]+"/g), i = aStr.length;
while(i--){
    aStr[i] = aStr[i].replace(/"/g,"");
}
// ["single", "words", "fixed string of words"]
12
ответ дан 28 November 2019 в 06:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: