用Regex在P标签中换行换行符

时间:2017-02-02 23:47:41

标签: jquery regex

我正试图抓住tinyMCE

标签,因为过去2天我无法解决如何解决问题。现在我正在努力做到以下几点:

我有一个文本区域,用\ n或\ r \ n(可能)创建新行,所以我必须将所有\ n包装在< * p>中标签,但有2个条件:

  1. 如果新行内容已经包含在P标记中,则应跳过它。
  2. 应从内容/文本行中删除第一个P标记。
  3. 以下是我到目前为止所做的事情:

     <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>
    

    javascript:

     var content = $('#t').val().replace(/\n{2,}/g, '<p></p>');
     alert(content);
    

    它产生以下结果:

     <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>
    

    下面是jsFiddle: https://jsfiddle.net/s99my37u/

1 个答案:

答案 0 :(得分:0)

这应该有效。我使用否定前瞻(?!)来查找不以<p>开头并且不以</p>结尾的行,以及捕获该行内容的捕获组(.*)然后我将其替换为包裹的捕获行<p>$1</p>,其中$1表示第一个捕获组。

我还使用了多行标记m,以便^$匹配行的开头和结尾。

var content = $('#t').val().replace(/^(?!<p>)(.*)(?!<\/p>)$/gm, "<p>$1</p>").replace(/<p>(.*)<\/p>/, "$1");
alert(content);