我有一个用户脚本,我写的是能够自动将粘贴到文本框中的运送详细信息(由用户脚本注入页面)插入到相应的字段中。数据由另一个脚本生成,该脚本将新条目读入电子表格,其格式如下:
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];
}
这段代码似乎运行得很好 - 我还没有发现它没有抓住换行符。但我想知道:是否有更优雅和/或更可靠的方法来捕捉这些?
答案 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;
}
这给了你一些回旋余地来找到并修复更多的奇怪之处。可以断言整个粘贴字符串已被使用,如果不匹配则打印剩余文本,并调整表达式以应对。