Удалить строку текста в 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`