按分开并避免字符串中的强标记

时间:2016-09-23 12:24:36

标签: javascript

我在我的母语下面有html代码,我正在尝试将其转换为我可以处理的数组。所以我想要的是将它拆分为一个数组,它避免使用强标记并按<br>拆分,但不能添加一个空对象与最后<br>

到目前为止,我有这个

var ingredients = $('div.ingredients p').html().replace(/<(?!br\s*\/?)[^>]+>/g, '').split("<br>");

HTML

<p>
    <strong>Dressing: </strong>
    <br>
    2-3 spsk græsk yoghurt, gerne 10 % 
    <br>
    1 lille spsk god mayonnaise
    <br>
    1-2 tsk æbleeddike 
    <br>
    1-2 tsk honning 
    <br>
    himalayasalt og friskkværnet hvid peber
    <br>
</p>

期望的输出

["2-3 spsk græsk yoghurt, gerne 10 %", "1 lille spsk god mayonnaise", "1-2 tsk æbleeddike", "1-2 tsk honning", "himalayasalt og friskkværnet hvid peber"]

3 个答案:

答案 0 :(得分:0)

您可以使用pop()删除最后一个元素。

var ingredients = $('div.ingredients p').html().replace(/<(?!br\s*\/?)[^>]+>/g, '').split("<br>");

ingredients.pop();

//[" Dressing:  ", " 2-3 spsk græsk yoghurt, gerne 10 % ", " 1 lille spsk god mayonnaise ", " 1-2 tsk æbleeddike ", " 1-2 tsk honning ", " himalayasalt og friskkværnet hvid peber "]

答案 1 :(得分:0)

假设最后一个br可能存在或不存在(或者更糟糕的是可能存在多个br),最好的事情是在拆分后过滤掉空元素

类似的东西:

$('div.ingredients p')
  .html()
  .replace(/<(?!br\s*\/?)[^>]+>/g, '')
  .split("<br>")
  .filter(function(e) { return e.trim() !== ''})

此外,我感觉您必须更换,并且\ n用&#39;&#39;

答案 2 :(得分:0)

如果您想要使用原生ES6 Javascript:

function split(selector) {
  const elem = document.querySelector(selector);
  const content = elem && elem.innerHTML;
  if (!content) { return null; }

  return content
      .split('<br>')
      .map(it => it.trim())
      .filter(it => !!it && !it.startsWith('<strong>'));
}

使用:

const res = split('div.ingredients p')
console.log(res);

输出是:

["2-3 spsk græsk yoghurt, gerne 10 %", "1 lille spsk god mayonnaise", "1-2 tsk æbleeddike", "1-2 tsk honning", "himalayasalt og friskkværnet hvid peber"]