2014-02-03 4 views
0

Предположим, вы читали текстовый файл с Javascript и jQuery и предположили, что серверный парень не захотел дать вам сказать xml или JSON, и вы хотите разобрать вещь один раз, чтобы получить соответствующие текст, который вы будете использовать позже в автозаполнения, например, так:Найти конкретные результаты из текстового файла

текстовый файл (предположим, что есть много подобных объявлений и есть разные БАЗ):

QUERY:1 
DATABASE:geoquery 
NL:What are the capitals of the states that border the most populated states? 
SQL:something 
DR: 
root(ROOT-0, What-1) 
cop(What-1, are-2) 
det(capitals-4, the-3) 
nsubj(What-1, capitals-4) 
det(states-7, the-6) 
prep_of(capitals-4, states-7) 
nsubj(border-9, states-7) 
rcmod(states-7, border-9) 
det(states-13, the-10) 
advmod(populated-12, most-11) 
amod(states-13, populated-12) 
dobj(border-9, states-13) 

QUERY:2 
DATABASE:geoquery 
NL:What are the capitals of states bordering New York? 
SQL:SELECT state.Capital FROM state JOIN border_info ON state.State_Name   
DR: 
root(ROOT-0, What-1) 
cop(What-1, are-2) 
det(capitals-4, the-3) 
nsubj(What-1, capitals-4) 
prep_of(capitals-4, states-6) 
partmod(states-6, bordering-7) 
nn(York-9, New-8) 
dobj(bordering-7, York-9) 

я могу использовать регулярное выражение шелушиться сказать все NL: например, но мне нужно сначала перенести файл вниз, чтобы только чтение определенных NL, связанных с DATABASE. Поэтому прочитайте файл после получения всех совпадений для конкретной базы данных, которую пользователь выбирает из выбора, а затем создайте массив из NL из этого списка, чтобы быть источником автозаполнения.

$(document).ready(function(){ 
     $.get('inputQueryExamples.txt',function(data){ 

      // need code here to read text file first and limit results 

      var queryString = data; 
      var cleanString = ""; 
      cleanString = queryString.match(/^NL.*/gm); 
      console.log(cleanString);  
      $('#what').html(cleanString); 

      var nlString = cleanString.map(function(el) {return el.replace('NL:','');}); 




      $('#query-list').autocomplete({ 
       source:nlString 
      }); 

     });//end get 

    }); 

Спасибо за понимание.

+3

Предположим, что вы делаете это правильно и получить парень сервер для фильтрации данных для вас и представить его в полезная форма? –

+2

Скажите своему парню на стороне сервера, что он абсолютный рывок. Я на самом деле абсолютно серьезно, потому что, если это для бизнеса, клиент и сервер должны эффективно общаться и без большого количества странной обработки от клиента. Кроме того, почему запросы SQL возвращаются клиенту? – Zarathuztra

+0

Чтобы ответить на вопрос, мы переводим естественный язык в SQL. Это обычно приводит к нескольким возможным SQL-запросам, обычно первый перевод является лучшим, но не всегда. Поэтому они хотят видеть все переводы, поэтому «правильный» можно выбрать для выполнения. – MJMacarty

ответ

0

Использование регулярного выражения для этого похоже на использование ducktape для исправления разорванной конечности.

Любой путь,

Взглядами него, вы хотите, чтобы получить все NL ('), когда они приходят из определенной базы данных.

Вам нужно будет выполнить многострочное регулярное выражение с положительным lookbehind для имени базы данных, после чего вы просто сравните что-нибудь после NL, остановившись на следующей новой строке.

Пример:

(?<=DATABASE:geoquery).*?(?<=NL:)(.*?)(?=[\r\n])

Интернет демо:

Regex101 Example

+0

Очень круто. regex - очень хорошая вещь, чтобы лучше знать. – MJMacarty

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