我需要创建一个包含样式信息的字符串的 Javascript 对象表示。样式标识符并不重要,但为了这个问题,让我们使用 stackoverflow 使用的标识符:
*text* = italic
**text** = bold
***text*** = bold italic
我想创建的数据表示是一个对象数组,按照它们出现在字符串中的顺序,每个对象如下:
{
stringpart : (string),
style : (normal | bold | italic | bold italic)
}
因此给出以下字符串:
This is some example text, with some **bold** and *italic* ***styles***.
应转换为以下对象数组:
[
{
stringpart : "This is some example text, with some ",
style : "normal"
},
{
stringpart : "bold",
style : "bold"
},
{
stringpart : " and ",
style : "regular"
},
{
stringpart : "italic",
style : "italic"
},
{
stringpart : " ",
style : "normal"
},
{
stringpart : "styles",
style : "bold italic"
},
{
stringpart : ".",
style : "normal"
}
]
到目前为止,我已经开始研究 html 解析器并遇到以下代码:
var
content = 'This is some <b>really important <i>text</i></b> with <i>some <b>very very <br>very important</b> things</i> in it.',
tagPattern = /<\/?(i|b)\b[^>]*>/ig,
stack = [],
tags = [],
offset = 0,
match,
tag;
while (match = tagPattern.exec(content)) {
if (match[0].substr(1, 1) !== '/') {
stack.push(match.index - offset);
} else {
tags.push({
tag: match[1],
from: stack.splice(-1, 1)[0],
to: match.index - offset
});
}
offset += match[0].length;
}
content = content.replace(tagPattern, '');
// now use tags array and perform needed actions.
// see stuff
console.log(tags);
console.log(content);
//example of correct result
console.log(content.substring(tags[3].from, tags[3].to));
虽然此代码中的正则表达式可用于检测上述样式标识符,但它不会以所需格式输出数据,因为它只是从索引返回/返回索引。
如何使用上述标识符有效地将字符串转换为所需的数组/对象表示?