我正在尝试“清理”看起来像这样的文本字符串:
DATABASE:madsat NL:Show all platforms of Salute generated from NAIs with no go mobility.
清理后的字符串应如下所示:
Show all platforms of Salute generated from NAIs with no go mobility.
我正在尝试以下代码,但是当我传入一个变量时它似乎不喜欢它,因为字符串被返回不变:
$(document).ready(function(){
$.get('inputQueryExamples.txt',function(data){
var queryString = data;
var cleanString = "";
var db = '';
$('#database-list').change(function(){
db = $('#database-list').val();
// /(^DATABASE:.*\r\n)(^NL.*)/gm
// http://regex101.com/r/mN4hS2
regex = new RegExp('(^DATABASE:'+ db +'\r\n)(^NL.*)' ,'gm');
console.log(db);
console.log(regex);
//put code in here to replace un-needed stuff
$('#what').append(regex + '<br>');
cleanString = queryString.match(regex);
var nlString = cleanString.map(function(el) {return el.replace('DATABASE:' + db + ' NL:','');});
for (i=0; i<nlString.length; i++){
$('#what').append(nlString[i]+'<br>');
}
}); // end change
任何有关我所做错事的见解都将受到赞赏。感谢
答案 0 :(得分:0)
这样的东西?
var s = "DATABASE:madsat \r\nNL:Show all platforms of Salute generated from NAIs with no go mobility.";
var db = "madsat";
var r = new RegExp('(^DATABASE:'+ db + '[\\s\\r\\n]*)(^NL:)' ,'gm');
s1.replace(r, "");
//=> "Show all platforms of Salute generated from NAIs with no go mobility."
您尝试接收的内容需要一段时间(并且您的示例数据非常隐藏在regex101链接中。)
但我认为 JSBin 与你想做的事情很接近:它仍然会找到一个匹配项,另一个则删除不需要的部分比赛。但是第二次传递是由单个正则表达式replace
调用而不是上面的双replaces
来处理的。 (单击“使用JS运行”按钮并在框中输入“madsat”或“geoquery”。)
这是相关代码:
$(document).ready(function() {
$.ajax('http://jsbin.com/fase/1.js', {dataType:'text'}).done(function(data){
var $what = $("#what");
$('#database-list').change(function(){
var db = $(this).val(),
base = '(^DATABASE:'+ db + '[\\s\\r\\n]*)(^NL:)';
var regex1 = new RegExp(base + '(.*)' ,'gm');
var regex2 = new RegExp(base, 'gm');
(data.match(regex1) || []).map(function(str) {
return str.replace(regex2, "");
}).forEach(function(query) {
$what.append(query + "<br/>");
});
});
});
});
请注意,两个正则表达式是相同的,只是第一个与“NL:” - 行的其余部分相匹配,而第二个不匹配。
答案 1 :(得分:0)
所以这有效,但我不知道为什么我要处理字符串两次。谁能解释一下?
var nlString = cleanString.map(function(el) {return el.replace('DATABASE:' + db,'');});
nlString = nlString.map(function(el){return el.replace('NL:',''); });