JQuery:为Regex-matches

时间:2017-04-19 11:12:41

标签: jquery regex replace highlight

我想在我的网站上将HTML-Code显示为文本。我在html中有以下示例文本:

<div id="test">
    &lt;p&gt;Hello&lt;/p&gt;  <br />
    &lt;p&gt;Hello2&lt;/p&gt;
</div>

显示:

<p>Hello</p> 
<p>Hello2</p> 

在我的网站上。

现在我想更改标签的颜色。我在互联网上发现了一个想法,用一个包含在类的范围内的相同文本替换一个RegExp来改变该范围的样式。

我在JQuery中尝试过:

$(document).ready(function ()
{
    var oldHtml = $("#test").html();
    var newHtml = oldHtml.replace(new RegExp("(&lt;){1}.*(&gt){1};","g"), "<span class='highlight'>$1</span>");
    $("#test").html(newHtml);
});

得到以下内容:

< 
< 

我做错了什么?

1 个答案:

答案 0 :(得分:1)

捕获组位于错误的位置。您正在将开始括号捕捉到$1并将closei括号移至$2,这是您从未使用过的。

(&lt;){1}.*(&gt){1};

您也不需要量词。

&lt;(.*?)&gt;

使用这种模式和相同的替换它应该工作。 *?量词使它不贪心,因此它会尽可能早地停止匹配。

请注意,使用正则表达式解析HTML是个坏主意。即使HTML的某些部分被转义,它仍然是一种不常规的硬语言。它最终无法发挥作用。请改用解析器。或者对于您的用例,只需使用许多易于查找和使用语法突出显示库之一。