我有一些数据,其中格式化命令已经以
格式创建^B Makes the rest of the line bold
^I Makes the rest of the line italic
等等,我正在尝试将其转换为html <b>
,<i>
等。
这些代码可以合并并出现在行中的任何位置,但仅适用于该行的其余部分。
我已将数据标记为行,并在每行使用analyze-string
来获取格式标记。问题是我需要打开格式化指令,我在字符串中找到它,然后在字符串的末尾关闭它,而我所拥有的不起作用,因为它打开并关闭标记所在的格式,正如你所料:
<xsl:analyze-string select="." regex="\^([BIU])">
<xsl:matching-substring>
<xsl:element name="{lower-case(regex-group(1))}"/>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="." />
</xsl:non-matching-substring>
</xsl:analyze-string>
我从中得到的是:
<b></b> Makes the rest of the line bold
<i></i> Makes the rest of the line italic
我想要的东西显然是
<b> Makes the rest of the line bold </b>
<i> Makes the rest of the line italic </i>
我看不到使用analyze-string
来实现这一点的方法,而我能看到的唯一方法就是使用递归函数来处理子字符串后的等等。凌乱。
任何有更好主意的人?谢谢!
Screwtape。
答案 0 :(得分:0)
你只需要在你的正则表达式中添加另一个模式来捕获符号后面的其余部分,然后可以在新创建的元素中输出
试试这个
<xsl:analyze-string select="." regex="\^([BIU])(.*)">
<xsl:matching-substring>
<xsl:element name="{lower-case(regex-group(1))}">
<xsl:value-of select="regex-group(2)" />
</xsl:element>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="." />
</xsl:non-matching-substring>
</xsl:analyze-string>