拆分逗号并忽略双引号(来自filereader / loaded文件 - 使用正则表达式)

时间:2015-09-17 12:29:38

标签: javascript regex file split

我在表单中有一些数据输入,可以从.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");
}

谢谢。

1 个答案:

答案 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;
&#13;
&#13;

我所做的只是在引号正则表达式之外的逗号中添加带有数字的替换,并删除替换回调函数中用双引号括起来的条目的初始和最终"