正则表达式替换所有出现的li标签

时间:2017-10-09 22:57:43

标签: javascript html regex rtf

我想用“\ par {\ pntext \ f1''B7 \ tab}”替换字符串中所有出现的li标签,然后将标签内的任何数据附加到其末尾。

基本上将html转换为rtf格式。

例如

<ul><li>list1 line1</li></ul>
<ul><li><span>list2 line1</span></li></ul>

最后我要删除所有ul标签

function convertHtmlToRtf(html) {
   var richText = html;

    richText = richText.replace(/<(?:b|strong)(?:\s+[^>]*)?>/ig, "{\\b\n");

    return richText;
}

1 个答案:

答案 0 :(得分:0)

您的问题有点宽泛,但是因为您说您使用的是javascript并想要一个正则表达式。然后我假设你有一个字符串,并希望用给定的字符串替换<li></li>对。还假设您的HTML总是非常简单且可预测(<li> s内没有<li>),那么您可以这样做:

var str = "<ul><li>list1</li></ul>\n<ul><li><span>list2 line1</span></li></ul>";
str.replace(/<li( [^>]*){0,1}>(.*)<\/li>/, "\\par {\\pntext\f1 ''B7\\tab} $2");

这里我使用的是与一对<li>匹配的正则表达式,并用该神奇的字符串替换它们但保留内部的任何内容(注意,您可以轻松扩展它以同时删除ul如果必要的。结局结果:

<ul>\par {\pntext1 ''B7\tab} list1</ul>
<ul>\par {\pntext1 ''B7\tab} <span>list2 line1</span></ul>

现在你可以立即注意到它不会删除里面的标签 - 所以<span>将留在那里。如果你可以使用jQuery,那么正确转换节点可能比使用Regex更容易(这可能会变得相当复杂)

编辑:

由于已经澄清jQuery可以用于帮助解析,所以这里有一个如何使用它的简单示例:

https://jsfiddle.net/nazy8sc6/2/

var html = "<ul><li>list1 <b>line1</b></li></ul><ul><li><span>list2 line1</span></li></ul>";

var TAB_STR = "\\par {\\pntext1 ''B7\\tab}";

function convertLi(parent, node) {
  var convertedText = TAB_STR + " " + $(node).text() + "<br>";
  var convertedNode = $('<span></span>').html(convertedText);
  $(parent).append(convertedNode);
}

function convertHtmlToRtf(html) {
  var result = $('<span></span>');
  $(html).find('li').each((_, node) => {
    convertLi(result, $(node));
  })
  return result.html().replace(/<br \>/g, "\n");
}

var res = convertHtmlToRtf(html);

console.log(res);

在此解决方案中,您只需查找所有<li>标记并从中提取内容 - 我始终将原始HTML保留在那里,只需将转换后的内容复制到新的HTML中,我们最终从中提取完全转换后的文本。希望这会对你有所帮助,但如果我没有成功地解释自己,请告诉我。