Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从contenteditable中删除连续的换行符_Javascript_Jquery_Ruby On Rails - Fatal编程技术网

Javascript 从contenteditable中删除连续的换行符

Javascript 从contenteditable中删除连续的换行符,javascript,jquery,ruby-on-rails,Javascript,Jquery,Ruby On Rails,在我的表单中,我将contenteditablediv的内容复制到一个隐藏字段中,该字段将被发送到db <%= form_for(@comment, remote: true) do |f| %> <%= f.hidden_field :content, class: 'js-NewCommentContentShadow' %> <div class="js-NewCommentContentField" contenteditable="true

在我的表单中,我将contenteditable
div
的内容复制到一个隐藏字段中,该字段将被发送到db

<%= form_for(@comment, remote: true) do |f| %>
    <%= f.hidden_field :content, class: 'js-NewCommentContentShadow' %>
    <div class="js-NewCommentContentField" contenteditable="true"></div>
<% end %>
你可以做:

"<div><br><br></div><br><br><br><div><br></div><br>".gsub(/(<br>){2,}/, '<br>')







”.gsub(/(
){2,}/,“
”)
输出

=> "<div><br></div><br><div><br></div><br>"
=>“




基本上,匹配组
()

的任何2个或多个匹配项-
{2,}
,并替换为

。因此,选择所有重复出现的

(不止一次)并替换单个


在实际情况中,您可能需要为
空白
换行符
等添加容差。

主要问题是
注释中的字符串。内容
包含不可打印的字符(特别是unicode零宽度连接字符),因此字符串

并不总是匹配的,因为这是不可见的字符

要解决这个问题,首先需要从字符串中删除这些字符,然后删除额外出现的

一种方法是使用
gsub
\p{Cf}
regex1,再次使用
gsub
替换额外的

,如下所示:

comment.content.gsub(/\p{Cf}/, "").gsub(/(<div><br><\/div>)+/, "<div><br></div>")
#=> "Some text<div>Some more text</div><div><br></div>. Here is another Some text<div><br></div><div>Some text</div>"
comment.content.gsub(/\p{Cf}/,”).gsub(/(
)+/,“
”) #=>“一些文本更多一些文本
。这里是另一些文本
一些文本”
要完全删除字符串末尾出现的所有

(示例3),可以添加另一个从字符串末尾删除该子字符串的gsub,例如:

comment.content.gsub(/\p{Cf}/, "")
       .gsub(/(<div><br><\/div>)+/, "<div><br></div>")
       .gsub(/(<div><br><\/div>)+$/, "")
comment.content.gsub(/\p{Cf}/,“”)
.gsub(/(
)+/,“
”) .gsub(/(
)+$/,“”)
在regexp中添加的
$
表示字符串结尾



1
\p{Cf}
代表Unicode字符的一般类别中的“其他:格式”。有关更多信息,请参阅。

您是否尝试过使用
gsub
?例如:
comment.content.gsub(“
”,“)
。这将删除所有换行符。我想在按下回车键时换行。但是我只想允许一个连续的换行符。我尝试了
comment.content.gsub(“

”,“
”)
,但它不起作用。它无论如何都不会工作,因为我需要考虑这些字符串的无限数量。gsub是否可能?注释的确切内容是什么?内容?我不知道,这是用户生成的注释。它可以由文本和任意数量的

实例组成。您的意思是
?我试过了,但没有任何效果。我不明白为什么你的代码中有
=>
,或者我应该把它放在我的视图中的什么地方?这里有两个东西,一个是正则表达式部分,由
/
括起来,这在不同的地方是可用的,你可以在JS中根据你的用户类型来做,wtv。剩下的是ruby,
gsub(/pattern/,'substitution')
。要使用
gsub
,您必须在渲染时或表单提交后使用它。就像我说的,你可能必须包括换行符和空白,wtv。您需要查看您的
原始
实际输出的内容,并对其进行调整。我已经尝试了
,但它似乎对输出没有任何影响。我用错了吗?或者我需要调整语法吗?你需要看看
comment.content
的输出是什么,这是一个实际的例子,它不起作用,因此你可以解释模式差异。我一直在尝试各种组合,但现在的问题是,我正在尝试你建议的代码,但它对输出没有任何影响。这正是我试图删除的字符串。当该字符串连续出现多次时,我想用“”替换它。你能告诉我如何做到这一点吗?谢谢Gerry,非常有帮助!您提供的代码修复了大部分问题,但它用一个换行符替换了连续换行符,我想用零替换连续换行符。只需将
gsub(/(
)+/,“
”)
更改为
gsub(/(
)+/,”)
。我尝试了,但只删除了所有换行符。我想留下单数换行符,但是当它们后面没有任何换行符,或者后面有另一个换行符时,删除所有换行符。当它们后面跟着文本时,我想保留它们。不过,谢谢,如果我玩一会儿,我可能会找到答案。@colmtuite-Hmm,您能为您提供的示例字符串提供所需的输出吗?是的,这解决了所有问题。非常感谢您的帮助,非常感谢!
Some text
<div>
  <br>
</div>
Some more text
Some text
<div>
  <br>
</div>
<div>
  <br>
</div>
<div>
  <br>
</div>
Some text
"<div><br><br></div><br><br><br><div><br></div><br>".gsub(/(<br>){2,}/, '<br>')
=> "<div><br></div><br><div><br></div><br>"
comment.content.gsub(/\p{Cf}/, "").gsub(/(<div><br><\/div>)+/, "<div><br></div>")
#=> "Some text<div>Some more text</div><div><br></div>. Here is another Some text<div><br></div><div>Some text</div>"
comment.content.gsub(/\p{Cf}/, "")
       .gsub(/(<div><br><\/div>)+/, "<div><br></div>")
       .gsub(/(<div><br><\/div>)+$/, "")