Jquery 用正则表达式将换行符包装在P标记中
我正试图找到tinyMCE标签,但从最近两天开始,我就不知道如何解决它。现在,我正努力做到以下几点: 我有一个文本区域,可以用\n或\r(可能)创建新行,因此我必须将所有\n包装在标记中,但有两个条件:Jquery 用正则表达式将换行符包装在P标记中,jquery,regex,Jquery,Regex,我正试图找到tinyMCE标签,但从最近两天开始,我就不知道如何解决它。现在,我正努力做到以下几点: 我有一个文本区域,可以用\n或\r(可能)创建新行,因此我必须将所有\n包装在标记中,但有两个条件: 如果新行内容已包装在P标记中,则应跳过它 第一个P标记应该从内容/文本行中删除 以下是我目前能做的: <textarea id="t"><p>replace P from the very first line until next new line comes<
<textarea id="t"><p>replace P from the very first line until next new line comes</p>
<p>this should be skipped</p>
all lines not wrapped in P should be wrapped and the ones already wrapped in P should be skipped
<p>already wrapped so skip it</p>
</textarea>
从第一行开始替换p,直到下一行出现
这应该跳过
所有没有用P包装的行都应该被包装,已经用P包装的行应该被跳过
已经包装好了,跳过它吧
javascript:
var content = $('#t').val().replace(/\n{2,}/g, '<p></p>');
alert(content);
var content=$('#t').val().replace(/\n{2,}/g,');
警报(内容);
它产生以下结果:
<p>replace P from the very first line until next new line comes</p><p></p><p>this should be skipped</p> all lines not wrapped in P should be wrapped and the ones already wrapped in P should be skipped<p></p><p>already wrapped so skipe it</p>
从第一行开始替换p,直到下一个新行出现这应该跳过所有没有用p包装的行都应该被包装,已经用p包装的行应该被跳过,所以跳过它
以下是JSFIDLE:
这应该行得通。我使用负前瞻
(?!)
查找不以开头、不以结尾的行,并使用捕获组捕获行的内容(.*)
,然后将其替换为包装的捕获行$1
,其中$1
表示第一个捕获组
我还使用了多行标志m
,以便^
和$
匹配行的开始和结束
var content = $('#t').val().replace(/^(?!<p>)(.*)(?!<\/p>)$/gm, "<p>$1</p>").replace(/<p>(.*)<\/p>/, "$1");
alert(content);
var content=$('#t').val()。替换(/^(?);
警报(内容);
试试Thank@WiktorStribiżew。。但是,它已经完全删除了第一行,它应该只删除P标记,但保留文本行。。第二,空的空行也应该被包装起来。又来了小提琴谢谢你的时间。。regardsIt显然是html解析器的工作,而不是正则表达式。谢谢@matt。。它在某种程度上起作用,但是它不会从第一个元素中删除
标记。我们可能需要运行另一个正则表达式来删除第一个
标记的出现?很抱歉,我错过了这个要求。我对答案进行了编辑,添加了一个额外的正则表达式来处理从第一行删除p
标记的问题。