extjs 4.2 - 替换子字符串,但避免更改标记

时间:2013-06-14 16:39:04

标签: regex string extjs replace extjs4.2

在给定的字符串中,例如"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”(等等)这样的子串。

任何帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

尝试这样的事情:     value.replace(/(e)+(?![^&lt;] *&gt;)/ g,“$ 1”);

(e)被替换为$1,可替换为符合您需要的任何正则表达式(将其括在括号中以允许$1替换)。所以,你也可以这样做,更有活力:

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

基本上,这是为了匹配第一个括号中的任何内容,除非它被标记(?![^<]*>)包围。