我正在AngularJS中开发一个单页应用程序。
有一个文本区域,用户可以在其中粘贴excel中的一些行。所有行都将具有相同的列数。我需要处理这些粘贴的数据,并将其转换为javascript数组。这不是问题,因为我可以用\r\n或\r\n或拆分字符串,用\t拆分字段。
如果其中一列中存在换行符,则会出现问题。但在这种情况下,该列用引号(")括起来
我知道regex在这里会有所帮助。然而,我正在努力构建一个正则表达式来忽略带有引号的换行符。
//PastedItemData will have the following data
1PS133-0FGD61**t**"Text with**rn**multiple**rn**lines"**t**1**t**5932.2**rn**2PS133-0FGD61**t**"Simple text with no new lines"**t**2**t**1234.5
var PastedItemDataArray = PastedItemData.split("rn"); ///use regex here?
我相信其他人可能也面临过类似的问题,即忽略数据中的新行。也许有一种不同于使用regex的方法。有人有什么想法吗?
谢谢。
我不能用正则表达式来完成,这段代码可以工作。
var PastedItemData = '1PS133-0FGD61**t**"Text with**rn**multiple**rn**lines"**t**1**t**5932.2**rn**2PS133-0FGD61**t**"Simple text with no new lines"**t**2**t**1234.5';
var i,c,ignore,cr,nl;
var rows,row,str;
ignore = false;
str = "";
rows = [];
row = [];
for (i = 0; i < PastedItemData.length; i++) {
c = PastedItemData[i];
if (ignore === true && c !== '"') {
str += c;
} else {
switch (c) {
case '"':
ignore = !ignore;
str += c;
cr = false;
break;
case "r":
cr = true;
break;
case "n":
if (cr === true) {
row.push(str);
rows.push(row);
row = [];
str = "";
c = "";
cr = false;
}
break;
case "t":
row.push(str);
str = "";
cr = false;
break;
default:
str += c;
cr = false;
break;
}
}
}
row.push(str);
rows.push(row);
console.log(rows);