是否有更可靠的方法来捕获换行符并结束文本?

时间:2017-05-09 19:44:17

标签: jquery line-breaks

我有一个用户脚本,我写的是能够自动将粘贴到文本框中的运送详细信息(由用户脚本注入页面)插入到相应的字段中。数据由另一个脚本生成,该脚本将新条目读入电子表格,其格式如下:

Name :: Simon

Email :: simon@example.com

Address 1 :: Castle 1

...

但是,有时某些数据会分解为第二行(通常只会出现在电子邮件地址中,出于某种原因),这意味着它看起来像这样:

...

Email :: 
simon@example.com

...

所以,我这样做了,因此usercript也捕获了这些,并且读取粘贴数据的函数如下所示:

$('#paste-box').on('paste', function(){
    setTimeout(function() {
        var rawData = $('#paste-box').val();
        var data = {};
        rawData = rawData.replace(' :: \n', ' :: ');  //this is the line that catches lines spilling into second line
        rawData = rawData.split('\n');
        for (var i = 0; i < rawData.length; i++) {
            line = rawData[i].split(' :: ');
            if (line.length == 2) data[line[0]] = line[1];
        }

这段代码似乎运行得很好 - 我还没有发现它没有抓住换行符。但我想知道:是否有更优雅和/或更可靠的方法来捕捉这些?

1 个答案:

答案 0 :(得分:0)

如果可能的话,我会将文本到对象的转换拆分为自己的函数。然后,如果您愿意,可以将替换,拆分和长度检查捆绑成一小串神秘字符。或者,换句话说,使用RegExp

function parseRawData(rawData) {
    var data = {};
    var re = /^(.*) :: \n?(.*)$\n*/gm;
    var match;
    while ((match = re.exec(rawData)) !== null) {
        data[match[1]] = match[2];
    }
    return data;
}

这给了你一些回旋余地来找到并修复更多的奇怪之处。可以断言整个粘贴字符串已被使用,如果不匹配则打印剩余文本,并调整表达式以应对。