将变量传递给map&更换

时间:2014-02-10 18:39:36

标签: javascript jquery function map replace

我正在尝试“清理”看起来像这样的文本字符串:

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

任何有关我所做错事的见解都将受到赞赏。感谢

2 个答案:

答案 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:',''); });