【问题标题】:How to split html tag string using regex如何使用正则表达式拆分html标签字符串
【发布时间】:2021-06-14 11:05:28
【问题描述】:

我需要使用<p> 标签来拆分它

  let val = '<p style={{marginTop:40px}}>ABC</P><p style={{marginTop:40px}}>ABC</P><p style={{marginTop:40px}}>ABC</P>'

需要这个

arr= ['<p style={{marginTop:40px}}>ABC</P>','<p style={{marginTop:40px}}>ABC</P>','<p style={{marginTop:40px}}>ABC</P>']

【问题讨论】:

  • “来自服务器的 json” - 请你解释一下?
  • 将此视为字符串,我想使用

    标记将其拆分,无法溢出此字符串,您能帮帮我吗

  • 这能回答你的问题吗? Split String in Javascript but keep delimiter /

标签: javascript regex react-redux


【解决方案1】:

您可以在 p 标记的末尾添加一个字符串。

let val = '<p style={{marginTop:40px}}>ABC</P><p style={{marginTop:40px}}>ABC</P><p style={{marginTop:40px}}>ABC</P>'


// Replace </p> with </p>###
val = val.replaceAll('</P>', '</p>###');

// Split on the newly added sign
let split = val.split('###');

// Filter out empty lines
newArr = split.filter((a) => a);

// Show result
console.log(newArr)

【讨论】:

    【解决方案2】:

    如果元素之间的连接有明显的模式,你可以这样做

    在这里,您依赖它总是在元素之间的交界处读取 准确 &lt;/P&gt;&lt;p。您使用 JS 的 replace 函数插入一段文本,您必须选择该文本以使其出现在真实服务器响应中的概率为零。然后使用JS的split函数在每次插入的文本出现时进行分割。

    const inp='<p style={{marginTop:40px}}>ABC</P><p style={{marginTop:40px}}>ABC</P><p style={{marginTop:40px}}>ABC</P>'
    
    const arr=inp.replace(/<\/P><p/g,"<\/P>###SLICE-HERE###<p").split("###SLICE-HERE###")
    
    console.log(arr)

    您可能还想处理 和

    的不同情况

    [pP] 表示“小写 p 或大写 P”。

    const inp='<p style={{marginTop:40px}}>ABC</P><p style={{marginTop:40px}}>ABC</P><p style={{marginTop:40px}}>ABC</P>'
    
    const arr=inp.replace(/<\/[pP]><[pP]/g,"<\/p>###SLICE-HERE###<p").split("###SLICE-HERE###")
    
    console.log(arr)

    如果服务器可以在段落之间发送空格或换行符?

    \s 代表任何空白字符。 * 表示 0 个或多个。

    const inp='<p style={{marginTop:40px}}>ABC</P><p style={{marginTop:40px}}>ABC</P>   <p style={{marginTop:40px}}>ABC</P>'
    
    const arr=inp.replace(/<\/[pP]>(\s)*<[pP]/g,"<\/p>###SLICE-HERE###<p").split("###SLICE-HERE###")
    
    console.log(arr)

    仍然不完美,因为正则表达式永远无法完全解析 HTML

    上面的代码示例仅适用于大量但不完整的情况。例如,如果服务器发送包含引用的&lt;/P&gt;&lt;P&gt; 的文本行,即为了在屏幕上显示该文本,我提供的脚本会将其误认为是段落的结尾。

    我相信,单独使用正则表达式来处理所有可能的 HTML 序列的一般情况是不可能的,并且无法按段落正确拆分它们。

    但是,如果服务器在您的控制之下,或者以其他方式合理地可能只发送行为良好的文本,并且您的目的不是关键任务,那么您可以按照您的描述做出合理的努力。

    【讨论】:

      猜你喜欢
      • 2011-09-25
      • 2011-05-01
      • 2022-01-15
      • 2011-12-28
      • 2017-02-23
      相关资源
      最近更新 更多