2017-02-11 3 views
-1

Я пытаюсь написать парсер, который поддерживает следующие типы статей запросаНаписание парсера запросов в JavaScript

от: Лицо
по адресу: конкретной компании
местонахождение: местонахождение данного лица

Так пример запроса будет как -

from:Alpha at:Procter And Gamble location:US 

Как написать этот общий парсер в javascript. Кроме того, я рассматривал в том числе и операторы в запросах как

from:Alpha AND at:Procter And Gamble AND location:US 

Однако, это будет противоречить значению критериев в любом из полей (Проктер энд Гэмбл)

+1

Пожалуйста, включите код у вас есть до сих пор. –

+0

Ваш синтаксис не очень хорошо разработан. Как ожидать, что сможете различать между И как оператором, так и «и» в «Проктер и Гэмбл»? –

+0

@torazaburo Это дилемма, в которой я нахожусь ... так как я хочу использовать логический оператор И для объединения этих предложений. Я попытался поэкспериментировать с «+», но это также противоречит моему набору данных, например: C++ –

ответ

1

Использование символа как «;» вместо AND, а затем вызвать диссертаций функции:

var query = 'from:Alpha;at:Procter And Gamble;location:US'; 
var result = query.split(';').map(v => v.split(':')); 
console.log(result); 

И тогда вы будете иметь массив пар, какой массив [0] = проп имя и массив [1] = значение проп

var query = 'from:Alpha;at:Procter And Gamble;location:US'; 
 
var result = query.split(';').map(v => v.split(':')); 
 
console.log(result); 
 

0

Asuming запрос всегда будет выглядеть следующим образом от: по адресу: местоположение:
Вы можете сделать это:

const regex = /from:\s*(.*?)\s*at:\s*(.*?)\s*location:\s*(.*)\s*/ 
 
const queryToObj = query => { 
 
    const [,from,at,location] = regex.exec(query) 
 
    return {from,at,location} 
 
} 
 
console.log(queryToObj("from:Alpha at Betaat:   Procter And Gamble location:   US"))

Однако добавление терминатор позволяют смешать заказ и понижая некоторые ключевые слова:

const regex = /(\w+):\s*(.*?)\s*;/g 
 
const queryToObj = query => { 
 
    const obj = {} 
 
    let temp 
 
    while(temp = regex.exec(query)){ 
 
    let [,key,value] = temp 
 
    obj[key] = value 
 
    } 
 
    return obj 
 
} 
 
console.log(queryToObj("from:Alpha at Beta;at:Procter And Gamble;location:US;")) 
 
console.log(queryToObj("at:Procter And Gamble;location:US;from:Alpha at Beta;")) 
 
console.log(queryToObj("from:Alpha at Beta;"))

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