我想用“\ 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;
}
答案 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中,我们最终从中提取完全转换后的文本。希望这会对你有所帮助,但如果我没有成功地解释自己,请告诉我。