Javascript编辑文本文件-删除除一行以外的所有空行
我刚开始学习Javascript,我正试图实现一个我脑海中浮现的项目。该项目是一个简单的文本编辑器,它将文本作为输入,进行一些更正,并使用固定文本发布输出 输入文本作为数组导入。文本的每一行都是对象属性。inputText用于在div内的浏览器中显示默认文本,outputText是我用于编辑的文本Javascript编辑文本文件-删除除一行以外的所有空行,javascript,arrays,Javascript,Arrays,我刚开始学习Javascript,我正试图实现一个我脑海中浮现的项目。该项目是一个简单的文本编辑器,它将文本作为输入,进行一些更正,并使用固定文本发布输出 输入文本作为数组导入。文本的每一行都是对象属性。inputText用于在div内的浏览器中显示默认文本,outputText是我用于编辑的文本 inputText = loadStrings("v.txt"); outputText = inputText; 现在输入的文本有一些句子。问题是中间有很多空行 我想要实现的是删除所有空行,但只有
inputText = loadStrings("v.txt");
outputText = inputText;
现在输入的文本有一些句子。问题是中间有很多空行
我想要实现的是删除所有空行,但只有一行,因此输出文本如下所示:
我正在寻找一个解决方案几乎3天了。我已经设法删除了所有的空行,但这不是我想要的。如果有多个空行,我想删除它们,但是如果只有一个空行,就不要做任何更改
这段代码是我尝试过的许多代码之一。这将删除所有空行:
(来源:)
这是我正在使用的所有HTML、CSS和JS代码的代码笔。
试试:
outputText = outputText.filter(function(e){
return e.replace(/[\r\n]+/g, '\n\n')});
我不确定上面的过滤功能。但尝试以下一个必须工作
outputText = outputText.replace(/[\r\n]+/g, '\n\n');
更换两条新线路是最简单的方法。你会得到你想要的。试试这个正则表达式:
e.replace(/([\r\n]){2,}/g, '\n\n')});
这将仅匹配两个或多个连续的空行,并替换为空行
我的测试代码:
var lines = 'firstLine\n\n\n\nsecodLine\n\n\n\n\n\n\nthirdLine';
/*
firstLine
secondLine
thirdLine
*/
console.log(lines.replace(/([\r\n]){2,}/g, '\n\n'));
/*
firstLine
secodLine
thirdLine
*/
我不知道
loadStrings
是否在行尾留下换行符。我假设是这样(基于我在本页看到的一些代码)。如果它最后被弄坏了,请说出来
像赫利奥·马尔西奥·费略所说的那样,在一根弦上做这件事肯定更容易。因此,在您的情况下,从一个数组开始,您可以将数组连接在一起,用两个换行符替换三个或更多的换行符,然后将其拆分为多行:
let outputText = inputText.join('').replace(/(?:\r?\n){3,}/g, '\n\n').
split(/\n/).map(line => line + "\n");
但是,您也可以使用过滤器-您只需要知道刚才看到了多少空行,并抑制多余的空行:
let empties = 0;
let outputText = inputText.filter(line => {
if (line.replace(/[\r\n]+/, '')) empties = 0;
else empties++;
return empties <= 1;
});
let清空=0;
让outputText=inputText.filter(行=>{
如果(换行符(/[\r\n]+/,'')为空=0;
否则清空++;
return清空其他答案使用单个字符串,但您使用的是Processing.js中的loadStrings()
函数,它为您提供了一个字符串数组
您可以将数组转换为单个字符串,或将文件作为单个字符串加载,但如果您只处理数组,这对我来说似乎是最简单的。如下所示:
function reduceNewlines(inputArray){
var outputNewArray = [];
var previousLineWasNewline = false;
for(var i = 0; i < myArray.length; i++){
if(myArray[i] == ''){
if(!previousLineWasNewline){
outputArray.push('');
}
previousLineWasNewline = true;
}
else{
outputArray.push(myArray[i]);
previousLineWasNewline = true;
}
}
return outputArray;
}
函数还原线(输入阵列){
var outputNewArray=[];
var previousLineWasNewline=false;
对于(var i=0;i
请注意,我还没有测试这段代码,可能还有很多改进的余地。但总体思路是:您可以编写一个函数来处理数组并返回一个新数组,同时删除连续的换行符
你也可以考虑预处理你的文本文件,这样你就不必这样做了。
首先,我要感谢大家的帮助。我研究了你所有的回复,我已经测试了其中的每一个,它们都在工作(有些需要调整)。作为独立的代码,但当我将它们插入到代码中时,有些地方出了问题。因此,我挣扎着提出了自己的解决方案,您的评论极大地激发了我的灵感
因此,在我的案例中起作用的代码是:
function reduceNewlines(outputTextEditNewLines) {
for (let key = 0; key < outputTextEditNewLines.length; key++) {
if (outputTextEditNewLines[key] == '') outputTextEditNewLines[key] = '\n';
else outputTextEditNewLines[key] = outputTextEditNewLines[key];
}
arrayToString = outputTextEditNewLines.join(""); // convert object myArray to string
console.log(arrayToString.replace(/([\r\n]){1,}/g, '\n\n')); // exports the text as it should
return arrayToString.replace(/([\r\n]){1,}/g, '\n\n');
}
函数reduceNewlines(outputExtEditNewlines){
for(让key=0;key
console.log按原样导出文本。现在,我的项目的下一步是让这个字符串在console.log中打印时打印到DOM。为了澄清,inputText
是数组还是字符串?inputText是一个对象。如果没有关于所述对象结构的更多信息,就不可能给您一个answer@Amadan我已经用一个包含我所有代码的代码笔更新了原始帖子。它位于原始帖子的最后一行。它根本没有帮助,因为loadStrings
是未定义的,所以在代码中我看不到关于inputText
是什么的指示。。filter
只对数组有效,对任何其他类型都无效这是他想要的。看他的问题。我已经试过了。无论我在正则表达式字段的第二部分放什么,都不会有什么区别。我试过用\n\n替换\n,只留下一些空引号,甚至试着放一些字符串值,看看它是否有区别。它没有。它是我会有所不同。我尝试并发布了答案。更新的答案。使用时不使用过滤功能。必须有效。@Sindhoor我尝试了你建议的更新单行代码,但我得到一个错误:index.js:80未捕获(承诺中)TypeError:outputText.replace不是removeEmptyLines的函数
我只尝试了你的代码,它确实可以工作。但在我的代码中,我必须使用对象或数组(实际上我现在对它是什么感到困惑)。如果我将文件加载为一个字符串,而不是对象或数组,那么您的解决方案可能会起作用?您可以使用array.reduce()将行数组转换为包含所有行的单个字符串,然后再应用该字符串
let empties = 0;
let outputText = inputText.filter(line => {
if (line.replace(/[\r\n]+/, '')) empties = 0;
else empties++;
return empties <= 1;
});
function reduceNewlines(inputArray){
var outputNewArray = [];
var previousLineWasNewline = false;
for(var i = 0; i < myArray.length; i++){
if(myArray[i] == ''){
if(!previousLineWasNewline){
outputArray.push('');
}
previousLineWasNewline = true;
}
else{
outputArray.push(myArray[i]);
previousLineWasNewline = true;
}
}
return outputArray;
}
function reduceNewlines(outputTextEditNewLines) {
for (let key = 0; key < outputTextEditNewLines.length; key++) {
if (outputTextEditNewLines[key] == '') outputTextEditNewLines[key] = '\n';
else outputTextEditNewLines[key] = outputTextEditNewLines[key];
}
arrayToString = outputTextEditNewLines.join(""); // convert object myArray to string
console.log(arrayToString.replace(/([\r\n]){1,}/g, '\n\n')); // exports the text as it should
return arrayToString.replace(/([\r\n]){1,}/g, '\n\n');
}