假设你正在阅读一个文本文件,使用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:例如,但我需要首先削减文件,以便只有与DATABASE相关联的特定NL才能读取。因此,一旦获取用户从select中选择的特定数据库的所有匹配项,就读取该文件,然后从该列表中创建一个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
});
感谢您的任何见解。
答案 0 :(得分:0)
使用正则表达式就像使用ducktape修补断肢一样。
无论如何,
根据它的外观,你想得到它们来自特定数据库的所有NL(.s)。
你需要做一个多线正则表达式匹配,对数据库名称有一个正面的lookbehind,然后你只需匹配NL之后的任何东西,停在下一个换行符。
示例:强>
(?<=DATABASE:geoquery).*?(?<=NL:)(.*?)(?=[\r\n])
在线演示: