2016-05-27 2 views
0

Я создаю интерактивное приложение с узлом, которое (очевидно) принимает пользовательский ввод. У меня много работы, но некоторые из входных данных имеют пробелы, с которыми будет работать вызов .split(' ').Строка parse для строки в командной строке

Пример того, что происходит:

> foo "hello world" bar 
['foo','"hello','world"','bar'] 

То, что я хочу, чтобы это произошло:

> foo "hello world" bar 
['foo','hello world','bar'] 

Я попытался ищет пакет NPM, но не везло.

Редактировать: Я знаю, что я могу использовать регулярное выражение, но я понятия не имею, какова будет правильная последовательность.

ответ

3

Вы можете использовать match()

console.log(
 
    'foo "hello world" bar'.match(/"[^"]+"|\w+/g) 
 
)

Regex explanation here

Regular expression visualization


Если вы хотите, чтобы избежать " затем использовать захваченное группу регулярных выражений с exec()

var str = 'foo "hello world" bar'; 
 
var reg = /"([^"]+)"|\w+/g, 
 
    m, res = []; 
 

 
while (m = reg.exec(str)) 
 
    res.push(m[1] || m[0]) 
 

 
console.log(res);

Regex explanation here

Regular expression visualization

-1

Если вы не хотите использовать регулярное выражение вы, возможно, делать

'foo "hello world" bar'.replace('"',"").split(" "); 

или не забудьте включить один котировку входного случая вы можете использовать простое регулярное выражение следующим образом

console.log('foo "hello world" bar'.replace(/("|')/g,"").split(" "));

Ну хорошо вот моя коррекция с регулярным выражением. Этот будет захватывать только текст между кавычками, исключая кавычки, не используя какие-либо группы захвата. Поскольку мы не используем группы захвата, простой способ String.prototype.match() может быть использован для решения нашего массива разыскиваемых ключей за один раз без цикла.

[^"]+(?="(\s|$))|\w+ 

Regular expression visualization

Debuggex Demo

var reg = /[^"]+(?="(\s|$))|\w+/g, 
 
    str = 'baz foo "hello world" bar whatever', 
 
    arr = str.match(reg); 
 
console.log(arr);

+0

Это выводит именно то, что я пытаюсь избежать – Valkyrie

+0

@Emillia К сожалению мой плохой. Скорректированный код прилагается ниже вводящего в заблуждение. Еще раз извините. – Redu

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