从Textarea删除第一行

时间:2017-12-19 00:44:20

标签: javascript regex whitespace

我有一个工具可以从确认(文本)中删除空白行,但由于某种原因,有一个顶行未被读取为空白行并且不会被删除。

目前,我的工具允许一个人将文本粘贴到textarea中,然后当"删除空格&拷贝"单击按钮删除空白行并将文本复制到剪贴板。

我希望保持相同的功能,但不管怎么说,当文本输入textarea或删除空格&&时,删除第一行。拷贝"单击按钮。

 <script>
 function copyToClipboard(element) {
  var text = $(element).clone().find('br').prepend('\r\n').end().text()
  element = $('<textarea>').appendTo('body').val(text).select()
  document.execCommand('copy')
  element.remove()
  }
  </script>

<textarea name="mas" rows="100" rows="50" contenteditable="true" id="p20" class="content" onchange="this.value=this.value.replace(/[\n\r](?!\w)/gi,'');" style="height: 500px; width:800px;" type="text" data-bind="value: myValue, hasFocus: cleared"></textarea>



<!----------- BUTTONS ------------>
<div class="fixed">
<button onclick="copyToClipboard('#p20')" class="templateBtn">Remove Spaces & Copy</button>
<input type="button" data-bind="click: clearValue" value="clear" class="templateBtn" />
<script type="text/javascript">
    var viewModel = {
   myValue: ko.observable(''),
   cleared: ko.observable(false),
   clearValue: function() {       
   this.myValue('');   
   this.cleared(true);
    }
  };

  ko.applyBindings(viewModel);
   </script>

  <!----------- END.BUTTONS ------------>

 <div class="mas" id="hide" ></div>

 <pre contenteditable="true" id="p20" class="templateText">

 </div></div>

2 个答案:

答案 0 :(得分:1)

正则表达式[\n\r](?!\w)匹配任何CR或LF后面没有字母数字或下划线字符。因此,当用空字符串替换空行时,它可以匹配连续两行中的第一个。 ''它与行终止符后跟一个字母不匹配。因此,文本开头的行终止符后跟一个单词字符留在原位。

空白行定义为&#34;行开头,后跟零个或多个空格字符,不包括行终止符,后跟行尾,后跟零个或多个行终止符&#34;可以通过多行正则表达式匹配,例如:

/^[ \f\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]*$[\n\r]*/gm;

其中第一个字符集是用于在删除换行符和回车字符后匹配空格(\s),并且$[\n\r]*组件匹配行终止符和输入结束。 (编辑:末尾没有行终止符的尾随空白行匹配)

通过输入行并在textarea元素外部单击以触发更改事件来尝试下面的操作:

&#13;
&#13;
function removeBlankLines( textArea) {
   var blankLine = /^[ \f\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]*$[\n\r]*/gm;
   textArea.value=textArea.value.replace(blankLine,'');
}
&#13;
<textarea onchange="removeBlankLines( this)" cols="20" rows="8"></textarea>
&#13;
&#13;
&#13;

这不会修剪或删除非空行中的空格。如果您仍然无法实现您想要做的事情,请使用用于产生问题的文本数据更新问题,并详细说明您的期望和所获得的内容。如果与问题无关,请删除淘汰代码(它似乎不是)。

答案 1 :(得分:0)

以下是您可以使用的快速解决方法,对替换后的文字执行trim()

<textarea name="mas" rows="100" rows="50" contenteditable="true"
id="p20" class="content"
onchange="this.value=(this.value.replace(/[\n\r](?!\w)/gi,'')).trim();"
style="height: 500px; width:800px;" type="text"
data-bind="value: myValue, hasFocus: cleared"></textarea>