1

在给定的字符串中,例如"This <TERM>is</TERM> my question <TERM>for</TERM> you",我需要替换一个子字符串。

目标:用<MARK>-Tags 包围子字符串以突出显示。

示例

子字符串:'e'

期望的结果:This <TERM>is</TERM> my qu<mark>e</mark>stion <TERM>for</TERM> you

实际结果:This <T<mark>E</mark>RM>is</T<mark>E</mark>RM> my qu<mark>e</mark>stion <T<mark>E</mark>RM>for</T<mark>E</mark>RM> you

我怎样才能防止伪标签<TERM>和蜜蜂</TERM>被改变?

直到现在,我用这个:

根据我的示例, filterValue 将是子字符串 'e'

var filterStartTag = '<mark>';
var filterEndTag = '</mark>';
var replaceFilterValue = filterStartTag + filterValue + filterEndTag;
value = value.replace(new RegExp(filterValue, 'gi'), replaceFilterValue);

我需要找到一个解决方案,其中也可以正确替换“t”、“te”、“erm”(等等)等子字符串。

任何帮助将不胜感激。

4

1 回答 1

1

试试这样的: value.replace(/(e)+(?![^<]*>)/g, "$1");

(e)是解释$1为您的替换的内容,并且可以替换为与您需要的匹配的任何正则表达式(将其用括号括起来以允许$1替换)。所以,你也可以这样做,更动态:

var r = new RegExp("(" + filterValue + ")+(?![^<]*>)", "gi");
value.replace(r, "<mark>$1</mark>");

本质上,这是说匹配第一个括号中的任何内容,除非它被 tags 包围(?![^<]*>)

于 2013-06-17T11:26:53.883 回答