Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
var str = 'foo bar "lorem ipsum" baz';
var results = str.match(/("[^"]+"|[^"\s]+)/g);
... возвращает массив, который Вы ищете.
Отметьте, однако:
replace(/^"([^"]+)"$/,"$1")
на результатах.lorem
и ipsum
, они будут в результате. Можно зафиксировать это путем выполнения replace(/\s+/," ")
на результатах."
после ipsum
(т.е. неправильно заключенная в кавычки фраза) Вы закончите с: ['foo', 'bar', 'lorem', 'ipsum', 'baz']
Попробуйте это:
var input = 'foo bar "lorem ipsum" baz';
var R = /(\w|\s)*\w(?=")|\w+/g;
var output = input.match(R);
output is ["foo", "bar", "lorem ipsum", "baz"]
Примечание там не является никакими дополнительными двойными кавычками вокруг lorem ipsum
Хотя это предполагает, что вход имеет двойные кавычки в правильном месте:
var input2 = 'foo bar lorem ipsum" baz'; var output2 = input2.match(R);
var input3 = 'foo bar "lorem ipsum baz'; var output3 = input3.match(R);
output2 is ["foo bar lorem ipsum", "baz"]
output3 is ["foo", "bar", "lorem", "ipsum", "baz"]
И не обработает оставленные двойные кавычки (который является проблемой?):
var input4 = 'foo b\"ar bar\" \"bar "lorem ipsum" baz';
var output4 = input4.match(R);
output4 is ["foo b", "ar bar", "bar", "lorem ipsum", "baz"]
Простое регулярное выражение сделает, но оставит кавычки. например.
'foo bar "lorem ipsum" baz'.match(/("[^"]*")|([^\s"]+)/g)
output: ['foo', 'bar', '"lorem ipsum"', 'baz']
править: избитый к нему shyamsundar, извините за двойной ответ
'foo bar "lorem ipsum" baz'.match(/"[^"]*"|\w+/g);
кавычки ограничения включены хотя
Большое спасибо за быстрые ответы!
Вот сводка опций для потомства:
var input = 'foo bar "lorem ipsum" baz';
output = input.match(/("[^"]+"|[^"\s]+)/g);
output = input.match(/"[^"]*"|\w+/g);
output = input.match(/("[^"]*")|([^\s"]+)/g)
output = /(".+?"|\w+)/g.exec(input);
output = /"(.+?)"|(\w+)/g.exec(input);
Для записи вот отвращение, которое я придумал:
var input = 'foo bar "lorem ipsum" "dolor sit amet" baz';
var terms = input.split(" ");
var items = [];
var buffer = [];
for(var i = 0; i < terms.length; i++) {
if(terms[i].indexOf('"') != -1) { // outer phrase fragment -- N.B.: assumes quote is either first or last character
if(buffer.length === 0) { // beginning of phrase
//console.log("start:", terms[i]);
buffer.push(terms[i].substr(1));
} else { // end of phrase
//console.log("end:", terms[i]);
buffer.push(terms[i].substr(0, terms[i].length - 1));
items.push(buffer.join(" "));
buffer = [];
}
} else if(buffer.length != 0) { // inner phrase fragment
//console.log("cont'd:", terms[i]);
buffer.push(terms[i]);
} else { // individual term
//console.log("standalone:", terms[i]);
items.push(terms[i]);
}
//console.log(items, "\n", buffer);
}
items = items.concat(buffer);
//console.log(items);
как насчет,
output = /(".+?"|\w+)/g.exec(input)
затем сделайте передачу на выводе для потери кавычек.
поочередно,
output = /"(.+?)"|(\w+)/g.exec(input)
затем сделайте передача n произвела для потери пустых получений.