In XSLT 2.0:
<xsl:analyze-string select="stuff" regex="B">
<xsl:matching-substring>
<sup><xsl:value-of select="."/></sup>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
In 1.0 it's considerably harder; you need to use recursive templates to process the string using substring-before, contains, and substring-after. There are examples in my book.
Michael Kay
http://www.saxonica.com/
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference