строки парсингов: извлечение слов и фраз [JavaScript]

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
9
задан AC 15 September 2008 в 17:26
поделиться

6 ответов

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']
15
ответ дан 4 December 2019 в 10:34
поделиться

Попробуйте это:

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"]
3
ответ дан 4 December 2019 в 10:34
поделиться

Простое регулярное выражение сделает, но оставит кавычки. например.

'foo bar "lorem ipsum" baz'.match(/("[^"]*")|([^\s"]+)/g)
output:   ['foo', 'bar', '"lorem ipsum"', 'baz']

править: избитый к нему shyamsundar, извините за двойной ответ

0
ответ дан 4 December 2019 в 10:34
поделиться
'foo bar "lorem ipsum" baz'.match(/"[^"]*"|\w+/g);

кавычки ограничения включены хотя

0
ответ дан 4 December 2019 в 10:34
поделиться

Большое спасибо за быстрые ответы!

Вот сводка опций для потомства:

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);
1
ответ дан 4 December 2019 в 10:34
поделиться

как насчет,

output = /(".+?"|\w+)/g.exec(input)

затем сделайте передачу на выводе для потери кавычек.

поочередно,

output = /"(.+?)"|(\w+)/g.exec(input)

затем сделайте передача n произвела для потери пустых получений.

1
ответ дан 4 December 2019 в 10:34
поделиться
Другие вопросы по тегам:

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