用javascript包装大的降价段落

用javascript包装大的降价段落,javascript,regex,replace,markdown,Javascript,Regex,Replace,Markdown,我试图找到大段落(超过一定数量的字符)并将其包装成一个跨度。目前我正在这样做: output.replace(/(\n{2}|^)([^\n{2}]{500,})(\n{2}|$)/mg, '$1<span class="warning-big-paragraph">$2</span>$3'); 它没有把第二段括起来。这一部分不像你想象的那样。除新行、{、2或}外,它将匹配500或更多的任何字符。试试这个: var pattern = /(\n{2}|^)((?:[^\

我试图找到大段落(超过一定数量的字符)并将其包装成一个跨度。目前我正在这样做:

output.replace(/(\n{2}|^)([^\n{2}]{500,})(\n{2}|$)/mg, '$1<span class="warning-big-paragraph">$2</span>$3');

它没有把第二段括起来。

这一部分不像你想象的那样。除新行、
{
2
}
外,它将匹配500或更多的任何字符。试试这个:

var pattern = /(\n{2}|^)((?:[^\n]|[^\n]\n[^\n]){500,})(\n{2}|$)/mg
这将匹配一对新行字符或字符串的开头,后跟500个或更多非新行字符或与任何其他新行字符不相邻的新行字符,后跟一对新行字符或字符串的结尾

但这里仍然存在一些问题:

  • 如果前面有一行新行,它将与第一段不匹配;如果后面有一行新行,它将与最后一段不匹配
  • 在两个连续的长段落之间需要四行换行,因为前一个匹配以两行新行结束,下一个匹配以两行新行开始
  • 这种模式解决了这两个问题:

    var pattern = /(\n{2}|^\n|^)((?:[^\n]|[^\n]\n[^\n]){500,})(?=\n{2}|\n$|$)/mg
    
    这将匹配一对新行字符、字符串开头和单个新行字符,或字符串开头,后跟500个或更多非新行字符或与任何其他新行字符不相邻的新行字符,后跟一对新行字符、单个新行字符和字符串结尾,或字符串的末尾。最后一部分是a,因此它不包括在比赛中,这意味着对于连续两场比赛,它可以用作前一场比赛的条件,也可以用作下一场比赛的条件


    您可以对其进行测试。

    暴力手段总是有的:

    output = output.split("\n\n").map(function(para) {
        return (para.length > 500
            ? ('<div class="warning-big-paragraph">' + para + '</div>')
            : para);
    }).join("\n\n");
    

    |

    @T.J.Crowder元素的类型无关紧要。我只想添加一些背景色作为警告。@Arash:然后为了避免创建无效文档,请使用
    div
    @T.J.Crowder谢谢!完成!:)抱歉说得不够清楚。降价中的段落由两行新行分隔。所以最后两行属于一段。@Arash:Doh!我知道。。。对不起。:-)谢谢,但我不能让它工作。在@ArashBadieModiri获得战利品:对我有用:()。
    output = output.split("\n\n").map(function(para) {
        return (para.length > 500
            ? ('<div class="warning-big-paragraph">' + para + '</div>')
            : para);
    }).join("\n\n");
    
    var paras;
    var index;
    var para;
    paras = output.split("\n\n");
    for (index = 0; index < paras.length; ++index) {
        para = paras[index];
        if (para.length > 500) {
            paras[index] = '<div class="warning-big-paragraph">' + para + '</div>';
        }
    }
    output = paras.join("\n\n");