V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fgt1t5y
V2EX  ›  正则表达式

[求助]如何利用正则表达式将文本或换行用 p 标签包裹起来

  •  
  •   fgt1t5y · 358 天前 · 980 次点击
    这是一个创建于 358 天前的主题,其中的信息可能已经有所发展或是发生改变。

    就是像下面这样:

    第一行
    
    第二行
    

    转换为

    <p>第一行</p>
    <p></br></p>
    <p>第二行</p>
    

    本人对正则表达式不太了解,特来 V 站问问万能的 V 友们。

    不求最优解,有思路就好。

    第 1 条附言  ·  358 天前
    正则不限数量,一条或多条都行
    9 条回复    2023-11-17 20:41:30 +08:00
    Jat001
        1
    Jat001  
       358 天前 via iPhone
    这太简单了吧,先把 \n 替换成 </p>\n<p>,再把<p></p> 替换成 <p></br></p>,要啥正则
    fgt1t5y
        2
    fgt1t5y  
    OP
       358 天前
    @Jat001 多谢大佬解答 确实可以 不过我更想要正则的解法
    sillydaddy
        3
    sillydaddy  
       358 天前
    如果是用 vscode 的话,
    第一遍先替换有文字的:
    ```
    ^(.+)$
    替换为
    <p>$1</p>
    ```
    第二遍替换没有文字的空行:
    ```
    ^$
    替换为
    <p><br/></p>
    ```

    其中,^和$分别是匹配行首和行尾的符号。第一遍里面的$1 表示的是正则表达式里面,第一个括号里面匹配的内容,同理$2 可以递推。
    Jat001
        4
    Jat001  
       358 天前 via iPhone
    正则也没办法把两步变成一步,拆成两步是最优解
    rimworld
        5
    rimworld  
       358 天前
    ```js
    const str =
    `第一行
    第二行`

    const list = str.split("\n")
    const res = []
    for (let i = 0; i < list.length; i++) {
    res.push(...[`<p>${list[i].trimStart()}</p>`, "<br></br>"])
    }
    console.log(res)
    ```
    rimworld
        6
    rimworld  
       358 天前
    @rimworld 必须正则啊,好吧
    fgt1t5y
        7
    fgt1t5y  
    OP
       358 天前
    @Jat001 可以有多条
    fgt1t5y
        8
    fgt1t5y  
    OP
       358 天前
    @sillydaddy 谢谢 已采纳
    fgt1t5y
        9
    fgt1t5y  
    OP
       358 天前
    问题解决 参考方案见 3 楼 :)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1568 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 18ms · UTC 17:11 · PVG 01:11 · LAX 09:11 · JFK 12:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.