我有以下代码:
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;
此处,rxp
是与数字匹配的正则表达式。
问题是,我只想替换123
中未包含的span
,而不是替换123
中包含的<span class="light">
。
答案 0 :(得分:2)
您可以使用reverse string trick来利用负面预测,而不是使用负面预测(JavaScript正则表达式引擎不支持):
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;
您还应该使用反向替换字符串。
编辑:如果您需要检查该数字是否未包含在带有任何属性的任何 <span>
标记中,您可以使用更简单的正则表达式:
var rxp = new RegExp("[0-9]+(?:\\.[0-9]+)?(?![^>]*>[^>]*\\bnaps<)", "gm");