Javascript 从contenteditable中删除连续的换行符
在我的表单中,我将contenteditableJavascript 从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
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>)+$/, "")