Я создаю эмулятор JS «командной строки».Javascript Regexp и «строковый литерал»
У меня есть регулярное выражение: /([^\s"]+)|"([^\s"]+)"/g
. Я хочу совместить отдельные слова, например echo
, wyświetl
, jd923h90asd8
. Кроме того, я хочу сопоставить «строковые литералы» - что-то вроде "this is a string"
или "f82h3 23fhn aj293 dgja3 xcn32"
.
Я использую метод ввода ввода для получения массива всех совпадений. Но проблема такова: , когда Regexp соответствует строковому литералу и возвращает строку в массив, эта строка ВКЛЮЧАЕТ двойные кавычки. Мне не нужны двойные кавычки, но вопрос в том, почему Regexp включает двойные кавычки? В Regexp котировки ""
исключены из группы ()
. Почему Regexp включает все это?
РЕДАКТИРОВАТЬ:
var re = /([^\s"]+)|"([^\s"]+)"/g;
var process = function (text) {
return execute(text.match(re));
}
var execute = function (arr) {
console.log(arr);
try {
//... apply a function with arguments...
} catch (e) {
error(arr[0]+": wrong function");
return "";
}
}
Для ввода echo abc "abc def" "ghi"
Regexp возвращает массив ["echo", "abc", "abc", "def", ""ghi""]
. Я хочу создать Regexp, чтобы с этого ввода вернется ["echo", "abc", "abc def", "ghi"]
.
Вы можете продемонстрировать это в действии, возможно, [демо] (http://jsfiddle.net/)? Или, по крайней мере, покажите код, который вы используете в своем вопросе. Боюсь, ваше описание не так ясно, как могло бы быть. Это или еще слишком рано для моего мозга ... –
Хорошо, я добавлю код. –
Возможно, не такая уж плохая идея сохранить котировки. Просто разделите двойные кавычки, когда вам потребуется содержимое строки. Помимо разрешения параметров с пробелами, это также индикатор * type *. В один прекрасный день вы можете решить, что параметры без двойных кавычек могут быть переменными, и в этом случае необходимо было бы отличить строку от возможного имени переменной (другими словами, вы можете захотеть, чтобы 'sort varname' имел другое значение, чем' Сортировка «varname» '. – Neil