在给定的字符串中,例如"This <TERM>is</TERM> my question <TERM>for</TERM> you"
,我需要替换子字符串。
目标:使用<MARK>
环绕子字符串 - 用于突出显示的标记。
示例:
substring:'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”(等等)这样的子串。
任何帮助都将受到高度赞赏。
答案 0 :(得分:1)
尝试这样的事情: value.replace(/(e)+(?![^&lt;] *&gt;)/ g,“$ 1”);
(e)
被替换为$1
,可替换为符合您需要的任何正则表达式(将其括在括号中以允许$1
替换)。所以,你也可以这样做,更有活力:
var r = new RegExp("(" + filterValue + ")+(?![^<]*>)", "gi");
value.replace(r, "<mark>$1</mark>");
基本上,这是为了匹配第一个括号中的任何内容,除非它被标记(?![^<]*>)
包围。