富文本格式的HTML拆分成多段闭合的标签
时间: 2024-03-13 20:48:11 浏览: 74
好的,如果您希望将富文本格式的HTML拆分成多个段落,并将每个段落中的开放和闭合标签对分别存储在不同的数组中,您可以尝试以下JavaScript函数。
```javascript
function splitHtmlTagsByParagraph(html) {
const paragraphs = html.split(/<\/p>\s*<p[^>]*>/i);
const result = [];
for (let i = 0; i < paragraphs.length; i++) {
const paragraph = paragraphs[i];
const tags = paragraph.match(/<[^>]+>/g) || [];
const contents = paragraph.split(/<[^>]+>/g);
if (tags.length !== contents.length - 1) {
throw new Error(`Invalid HTML in paragraph ${i + 1}`);
}
const tagContentPairs = [];
for (let j = 0; j < tags.length; j++) {
const tag = tags[j];
const content = contents[j + 1];
const isOpeningTag = !tag.startsWith("</");
if (isOpeningTag) {
tagContentPairs.push([tag, content, null]);
} else {
const openingTag = tagContentPairs.pop();
const openingTagName = openingTag[0].replace("<", "").replace(">", "");
const closingTagName = tag.replace("</", "").replace(">", "");
if (openingTagName === closingTagName) {
openingTag[2] = content;
tagContentPairs.push(openingTag);
} else {
throw new Error(`Mismatched tag: ${openingTagName} doesn't match ${closingTagName}`);
}
}
}
result.push(tagContentPairs);
}
return result;
}
```
使用示例:
```javascript
const html = '<p>Hello <strong>world</strong>!</p><p><em>How are you?</em></p>';
const tagContentPairsByParagraph = splitHtmlTagsByParagraph(html);
console.log(tagContentPairsByParagraph);
// Output: [[["<p>", "Hello ", null], ["<strong>", "world", "</strong>"], ["</p>", "!", null]], [["<p><em>", "How are you?", "</em></p>"]]]
```
上面的代码将会将包含在每个 `<p>` 标签中的文本拆分成多个数组,并将这些数组按照段落存储在 `tagContentPairsByParagraph` 数组中。数组中的每个元素都包含一个或多个子数组,每个子数组都包含三个值:开放标签、相应的文本和闭合标签。如果标签未正确匹配,函数将会抛出一个错误。
阅读全文