Удалить строку текста в JavaScript

В JavaScript, если у меня есть текстовый блок, как так

Line 1
Line 2
Line 3

Что мне нужно сделать, чтобы, скажем, удалить первую строку и превратить ее в:

Line 2
Line 3

8 ответов

Решение

Самый простой способ сделать это - использовать функции split и join, которые позволят вам манипулировать текстовым блоком в виде массива строк, например:

// break the textblock into an array of lines
var lines = textblock.split('\n');
// remove one line, starting at the first position
lines.splice(0,1);
// join the array back into a single string
var newtext = lines.join('\n');

Это удаляет первую строку из многострочной строковой переменной - проверено в Chrome версии 23 на переменной, которая была прочитана из файла (HTML5) с окончаниями / разрывами строк, которые отображаются в CRLF (возврат каретки + перевод строки) в Notepad++:

var lines = `first
second
third`;

// cut the first line:
console.log( lines.substring(lines.indexOf("\n") + 1) );

// cut the last line:
console.log( lines.substring(lines.lastIndexOf("\n") + 1, -1 ) )

Надеюсь, это поможет!

var firstLineRemovedString = aString.replace(/.*/, "").substr(1);

В двух словах: найдите первую строку return (\n) и используйте JavaScript replace функция, чтобы удалить все до него (и в том числе.)

Вот RegEx, который делает это (удивительно сложно, по крайней мере для меня...)

<script type = "text/javascript">
var temp = new String('Line1\nLine2\nLine3\n');
temp = temp.replace(/[\w\W]+?\n+?/,"");
alert (temp);
</script>

Вы можете сделать это с помощью регулярного выражения, включив в поисковый запрос символ новой строки. Если строка, которую вы хотите удалить, находится не в начале, вы должны использовать флаг multiline (m).

> var text = "Line 1\nLine 2\nLine 3";
> console.log(text);
Line 1
Line 2
Line 3
> text.replace(/^Line 1\n/m, "");
Line 2
Line 3
> text.replace(/^Line 2\n/m, "");
Line 1
Line 3

Попробуй это

Воспользуйтесь преимуществами классов JavaScript

object() разбивает строку, определенную в конструкторе, на массив строк, а метод real_array выполняет цикл по массиву и гарантирует, что в массиве нет пустого члена

constructor(string){
    this.string = string;
    this.value = string;
}


object(){ 
    return this.real_array(this.value.split('\n')); 
}
// returns ['Line 1','Line 2','Line 3']

remove(string_to_be_removed) собирает строку, которую вы собираетесь удалить, удаляя член массива, равный string_to_be_removed

remove(string_to_be_removed){
    var _object = this.object();
    _object.forEach((value,index) => {
    
        if (value.trim()===string_to_be_removed){
             delete _object[index];
        }
    });
    this.value = this.real_array(_object).join('\n');
    return this;
}

/*
new line(`Line 1
Line 2
Line 3`).remove('Line 1').value //returns 

Line 2
Line 3

*/

Полный код:

// Your code here!
class line{
    constructor(string){
        this.string = string;
        this.value = string;
    }
    
    object(){ 
        return this.real_array(this.value.split('\n')); 
    }


    remove(string_to_be_removed){
        var _object = this.object();
        _object.forEach((value,index) => {
            if (value.trim()===string_to_be_removed){
                delete _object[index];
            }
        });
        this.value = this.real_array(_object).join('\n');
        return this;
    }


    removeAll(string_to_be_removed){
        var _object = this.object();
        _object.forEach((value,index) => {
            if (value.trim().indexOf(string_to_be_removed)!=-1){
                delete _object[index];
            }
        });
        this.value = this.real_array(_object).join('\n');
        return this;
    }

    fetch(line_number){
        var _object = this.object();
        for (let i=0;i<_object.length;i++){
            if (i+1===line_number){
                return _object[i];
            }
        }
        return null;
    }


    edit(content,line_number){
         var _object = this.object();
        _object[line_number-1] = content;
         this.value = this.real_array(_object).join('\n');
         return this;
     }

    
    real_array(array){
        var output = [];
        array.forEach(element=>{
            if (element.trim().length>0){
                output.push(element);
            }
        });
        return output;
    }
}
var string = `1
2
3
Remove this
5
3
3
Remove this all
4
6
Remove this all and this
`

var line_string = new line(string)
console.log("Fetch with line number")
console.log(line_string.fetch(3))
console.log("-------------------")

console.log("Remove line by the string content on the line")
console.log(line_string.remove('Remove this').value);
console.log("------------")


console.log("Remove all occurrence of line by the string content on the lines")
console.log(line_string.removeAll('Remove this').value);
console.log("-------------------")

console.log("Edit line")
console.log(line_string.edit("I edited it",2).edit("I also edit this",5).value);

Я надеюсь, что это помогает кому-то

Я пошел немного дальше, чтобы вы могли выбрать количество строк в начале, которые вы хотите удалить:

Я использую это регулярное выражение, где X номер строки, которую вы хотите удалить +1 (?:.*?\n){X}(?:.*?\n)

const lines = `Line1
Line2
Line3
Line4`;
const deleteLines = (string, n = 1)=>{
  return string.replace(new RegExp(`(?:.*?\n){${n-1}}(?:.*?\n)`), '');
};
console.log(deleteLines(lines, 2));

Поток

В приведенном ниже решении используется шаблон потока, который основан на js-массивах и не является внутренним и позволяет продолжить обработку строки с помощью 'точки' (фрагмент) - (N - индекс строки удаления, начиная с нуля)

      text.split`\n`.filter((l,i)=> i != N).join`\n`

Другие вопросы по тегам