RegEx替换为主题字符串中的值

时间:2013-12-24 16:45:09

标签: javascript html regex

使用JavaScript,我用包含该词的<span>标签替换所有出现的单词。这就是我现在正在做的事情:

regEx = new RegExp('\\b(?![^<>]*>)'+word+'\\b', 'gi');
context.innerHTML = context.innerHTML.replace(regEx, '<span class="reference">'+word+'</span>');

哪个有效,但有一个问题:说我有word = 'mass',在文中我有Mass:因为搜索是不区分大小写的,它需要它,它会匹配它,但它会失去首都M,这是不好的 我可以使用regEx中匹配的字符串而不是我正在寻找的单词字符串吗?我知道可以使用preg_replace使用$0等在PHP中进行,但是我如何在JS中执行此操作?

谢谢!

3 个答案:

答案 0 :(得分:2)

你应该做这样的事情

regEx = new RegExp('\\b(?![^<>]*>)('+word+')\\b', 'gi');
context.innerHTML = context.innerHTML.replace(regEx, '<span class="reference">$1</span>');

答案 1 :(得分:1)

使用()抓住该字词,然后使用$1获取该字词 在这里阅读http://msdn.microsoft.com/en-us/library/ie/24th3sah(v=vs.94).aspx
像这样:

regEx = new RegExp('\\b(?![^<>]*>)('+word+')\\b', 'gi');
context.innerHTML = context.innerHTML.replace(regEx, '<span class="reference">$1</span>');

答案 2 :(得分:1)

JS中的情况大致相同。只需添加捕获组的括号:

var regEx = new RegExp('\\b(?![^<>]*>)('+word+')\\b', 'gi');

然后它可以按您的喜好工作(但请注意$0是整个字符串,因此您需要$1):

"a patriot from Boston, Mass was found...".replace(regEx, "<span class='reference'>$0</span>")
//=> "a patriot from Boston, <span class='reference'>Mass</span> was found..."

"difference between mass and weight is...".replace(regEx, "<span class='reference'>$1</span>")
//=> "difference between <span class='reference'>mass</span> and weight is..."

MDN 可能是最好的参考。