只替换具有类高亮javascript的子字符串

replace only sub string which has class highlight javascript

本文关键字:javascript 字符串 高亮 替换      更新时间:2023-09-26

我有以下代码:

document.getElementById("rep").innerHTML = document.getElementById("rep").innerHTML.replace(rxp, "abc");
<div id="rep"> asd 123 asd <span class="light">123</span> asd 123 asd <span class="light">123</span> </div>

这里,rxp是一个匹配数字的正则表达式。问题是我只想替换那些不在span中包含的123,而不是替换<span class="light">中包含的123

您可以使用反向字符串技巧来利用负正向查找而不是负向后查找(JavaScript regex引擎不支持):

function revStr(str) {
    return str.split('').reverse().join('');
}
var rxp = new RegExp("[0-9]+(?:''.[0-9]+)?(?![^>]*>'"thgil'"=ssalc''s+naps<)", "gm");
var str = '<div id="rep"> asd 123 asd <span class="light">123</span> asd 123 asd <span class="light">123</span> </div>';
var result = revStr(revStr(str).replace(rxp, revStr('abc')));
document.getElementById("res").value = result;
<input id="res"/>

您还应该使用反向替换字符串。

EDIT:如果您需要检查数字是否没有包含在任何 <span>标记中,您可以使用更简单的正则表达式:

var rxp = new RegExp("[0-9]+(?:''.[0-9]+)?(?![^>]*>[^>]*''bnaps<)", "gm");