我在表单中有一些数据输入,可以从.txt或.csv文件接收数据。代码将数据拆分为逗号(,)和任何数字(以避免数据库文件中的ID号)。
我在我的代码中使用以下正则表达式:
var text = textFromFileLoaded.split(/[\,\d]/);
像这样,它会将逗号(\,)和数字(\ d)之间的所有单词分开。它工作正常。但双引号之间的单词不应该分开。例如:
文件中的数据:样本一,样本二,"样本三,样本四",样本五
输出是:
sample-one | sample-two | "sample-three | sample-four" |
,输出应为:
sample-one | sample-two | sample-three, sample-four | sample five |
我检查了许多其他相关问题,答案通常建议如下:
("\"?(,|$)(?=(([^\"]*\"){2})*[^\"]*$) *\"?")
或:
(/('[^']+'|[^,]+)/g)
但是在我的代码中到目前为止还没有这样的功能。我做错了吗?
这是函数的代码:
function loadFileAsText()
{
var fileToLoad = document.getElementById("fileToLoad").files[0];
var fileReader = new FileReader();
fileReader.onload = function(fileLoadedEvent)
{
var textFromFileLoaded = fileLoadedEvent.target.result;
var text = textFromFileLoaded.split(/[\,\d]/);
document.getElementById("inputTextToSave").value = text[0];
document.getElementById("inputTextToSave2").value = text[1];
document.getElementById("inputTextToSave3").value = text[2];
document.getElementById("inputTextToSave4").value = text[3];
};
fileReader.readAsText(fileToLoad, "UTF-8");
}
谢谢。
答案 0 :(得分:2)
由于我的代码段有用:
var text = 'sample-one, sample-two, "sample-three, sample-four", sample-five';
var re = /,\s*(?=(?:[^"]|"[^"]*")*$)|\d/g;
var result = [].map.call(text.split(re), function(el) {
return el.replace(/^"|"$/g, '');
}
);
document.getElementById("r").innerHTML = result.join("<br/>");
&#13;
<div id="r"/>
&#13;
我所做的只是在引号正则表达式之外的逗号中添加带有数字的替换,并删除替换回调函数中用双引号括起来的条目的初始和最终"
。