我正在寻找一种方法来用它们的 HTML 等价物正确替换嵌套的自定义标签。例如,假设我们有以下文本:
This is {b:bold text}
应该变成:
This is <b>bold text</b>
我知道我可以 - 并且可能应该 - 使用带有“粗体”类的跨度之类的东西,而不是旧的“b”标签,但出于本示例的目的,我坚持使用“b”是有原因的. 我可能有嵌套标签:
This is {b:bold text and {i:italic}}
应该变成:
This is <b>bold text and <i>italic</i></b>
但是,我有这些正则表达式(与 replace() 函数一起使用):
/\{b:([\s\S]*?)\}/gm
/\{i:([\s\S]*?)\}/gm
然后结果会变成:
This is <b>bold text and <i>italic</b></i>
标签未正确嵌套。同样,在这种情况下,使用 span 可以解决这个问题,但是对于诸如“ul”、“li”、“h1”之类的东西不起作用……如果文本看起来像这样,贪婪的正则表达式也会导致问题:
This is {b:bold text} and {i:italic}
所以我目前的解决方案是先用 span 替换所有内容,使用 data-tag 属性来指示它实际上应该是什么,然后使用 jQuery 查找所有 span 节点并用适当的标签替换它们:
{h:This is a header}
becomes
<span data-tag='h1'>This is a header</span>
becomes
<h1>This is a header</h1>
它运作良好,但我想知道是否有更简单的方法来做到这一点。中间方法感觉有点像胶带解决方案,我想“美化”它。
有什么建议么?