仅替换具有类突出显示javascript的子字符串

时间:2015-05-14 07:40:39

标签: javascript regex replace innerhtml

我有以下代码:



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>
&#13;
&#13;
&#13;

此处,rxp是与数字匹配的正则表达式。 问题是,我只想替换123中未包含的span,而不是替换123中包含的<span class="light">

1 个答案:

答案 0 :(得分:2)

您可以使用reverse string trick来利用负面预测,而不是使用负面预测(JavaScript正则表达式引擎不支持):

&#13;
&#13;
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;
&#13;
<input id="res"/>
&#13;
&#13;
&#13;

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

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

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