仅替换具有类突出显示 javascript 的子字符串
Posted
技术标签:
【中文标题】仅替换具有类突出显示 javascript 的子字符串【英文标题】:replace only sub string which has class highlight javascript 【发布时间】:2015-07-25 18:00:30 【问题描述】:我有以下代码:
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
。
【问题讨论】:
【参考方案1】:您可以使用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;
<input id="res"/>
您还应该使用反向替换字符串。
编辑:如果您需要检查数字是否未包含在 any <span>
标记中带有任何属性,您可以使用更简单的正则表达式:
var rxp = new RegExp("[0-9]+(?:\\.[0-9]+)?(?![^>]*>[^>]*\\bnaps<)", "gm");
【讨论】:
如果数字的正则表达式是这样的: var rxp = new RegExp("(([0-9]+\.?[0-9]+)|([0-9 ]+))", "gm"); 我没有看到任何问题,因为您只匹配数字和数字之间的可选点:var rxp = new RegExp("[0-9]+(?:\\.[0-9]+)?(?![^>]*>\"thgil\"=ssalc\\s+naps<)", "gm");
。 编辑:我删除了\b
字边界,也许,即使是xxx123
,你也需要删除数字。
这是一个非常有创意的解决方案
@stribizhev 谢谢..!
@stribizhev 我有一个小问题,如果跨度类不轻,我的意思是如果它会是我不知道的东西,那么正则表达式会是什么?以上是关于仅替换具有类突出显示 javascript 的子字符串的主要内容,如果未能解决你的问题,请参考以下文章
给定具有多个边界框的图像,如何仅突出显示完全在另一个边界框内的那些边界框?