请教一个正则表达式:让任何两个段落之间都有两个换行符 - V2EX
Newyorkcity

请教一个正则表达式:让任何两个段落之间都有两个换行符

  •  
  •   Newyorkcity Dec 10, 2019 1910 views
    This topic created in 2348 days ago, the information mentioned may be changed or developed.

    在 markdown 文档的整理的时候,如果只是一个段结束,换行,不空一行就新起一段,那么最终显示的时候就好像这两段之间没有空行一样。。。emmmm。。。这好像是句废话

    简单来说就是我在用 vscode 的正则表达式查找替换功能,想把一个 markdown 中任何之间没有空行(即只有段结尾一个换行符,然后就立刻新起一段)的两段都改成中间有一个空行的。。不知道这个正则表达式该怎么写。。

    另外因为 markdown 里有表格,所以要除外表格的分隔符|后只接一个换行符的情况。。。

    谢谢!!

    4 replies    2019-12-10 20:05:34 +08:00
    geelaw
        1
    geelaw  
       Dec 10, 2019 via iPhone   1
    首先你对 Markdown 的语法理解有误。Markdown 换段需要有一个空白行,所以换一行并没有换段。在经典 Markdown 中,段落内换一行等同于一个空格,因为默认的 p 的 white-space 是 normal。在非经典实现中可能会让段显示为 pre-line,或者插入 br。

    最佳实践是两个块级元素之间都应该有一个空白行,因此在表格周围也应该有空白行。

    使用正则表达式替换是非常困难的,因为 Markdown 的句法不是正则语言。例如,用一个很短的正则表达式无法区分换行是否处于一段 code block 内,进而无法发现这里是否应该增加一个空行。又例如它很难处理 block quote 里面需要增加带有 > > 的空白行的情况。

    如果没有上述情况,只要替换(\S)\n(\S) 为 $1\n\n$2 即可。
    sivacohan
        2
    sivacohan  
    PRO
       Dec 10, 2019   1
    查找: ^((?!#))(.+?)((?<!\|))$
    替换: $1$2$3\n

    用了三个组:
    第一个排除了开头是#(标题)
    第二个排除了本身就是空行的情况
    第三个排除结尾是|(表格的情况)
    MonoLogueChi
        3
    MonoLogueChi  
       Dec 10, 2019 via Android
    说句题外话标准 markdown 语法,换行好像是结尾空 2 格,gfm 标准好像是直接换行,具体怎么实现都是看渲染器的。
    zappos
        4
    zappos  
       Dec 10, 2019 via Android
    @geelaw 我的做法是先把 code block 替换为一个 token,然后执行其它操作,最后再替换回来
    About     Help     Advertise     Blog     API     FAQ     Solana     893 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 22:27 PVG 06:27 LAX 15:27 JFK 18:27
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86