找到单词并使用正则表达式替换为html标记

时间:2016-05-12 08:22:41

标签: html regex replace tags tex

我有一个文字等式:10x^2-8y^2-7k^4=0。 如何找到^并使用正则表达式将整个字符串中的<sup>2</sup>替换为str = str.replace(/\^\s/g, "<sup>$1</sup> ")。结果应该是:

enter image description here

我尝试id,但我没有得到预期的结果。

任何有助于解决我的问题的想法?

2 个答案:

答案 0 :(得分:2)

我认为你正在寻找像

这样的东西
\^(\d+)

匹配^,捕获指数并替换为

<sup>$1</sup>

See it here at regex101

修改

要满足您的新要求,请检查this fiddle。它使用函数替换来处理sub

答案 1 :(得分:1)

您当前的模式与插入符号后跟空格字符(空格,制表符,换行符等)匹配,但您希望匹配插入符后跟单个字符或多个字符包含在赞誉中,因为您的字符串是在TeX。

/\^(?:([\w\d])|\{([\w\d]{2,})\})/g

现在,使用str = str.replace(/\^(?:([\w\d])|\{([\w\d]{2,})\})/g, "<sup>$1</sup>");可以胜任。

您可以使用此表达式创建一个更通用的函数,该函数可以包含带有特定标记的特定字符前缀的字符。

function wrapPrefixed(string, prefix, tagName) {
    return string.replace(new RegExp("\\" + prefix + "(?:([\\w\\d])|\\{([\\w\\d]{2,})\\})"), "<" + tagname + ">$1</" + tagname + ">");
}

例如,调用wrapPrefixed("1_2 + 4_{3+2}", "_", "sub");会产生1<sub>2</sub> + 4<sub>3+2</sub>