Javascript 将正则表达式限制为仅包含非html文本
我找到了这个javascript函数,它替换字符串中的所有事件。它工作得很好,但我需要它只适用于非html元素,这意味着字符串中不在“”之间的任何部分Javascript 将正则表达式限制为仅包含非html文本,javascript,html,regex,Javascript,Html,Regex,我找到了这个javascript函数,它替换字符串中的所有事件。它工作得很好,但我需要它只适用于非html元素,这意味着字符串中不在“”之间的任何部分 我希望这样做,因为“strReplace”字符串有时出现在html中,因此会弄乱html输出。感谢您的帮助:)假设您想用replaceAll方法替换一个字符串: 如果一个字符串不是一个有效的html,则将其视为纯文本 如果一个字符串是一个有效的html,则循环每个文本内容以应用replaceAll 解决方案(使用element.innerHTML
我希望这样做,因为“strReplace”字符串有时出现在html中,因此会弄乱html输出。感谢您的帮助:)假设您想用
replaceAll
方法替换一个字符串:
replaceAll
.innerHTML
replaceAll
el.innerHTML
String.prototype.replaceAll=函数(strReplace,strWith){
//看http://stackoverflow.com/a/3561711/556609
var esc=strReplace.replace(/[-\/\\^$*+.()|[\]{}]/g,\\$&');
var reg=新的RegExp(esc,'ig');
返回此项。替换(reg,strWith);
}
函数replaceAll2(targetString、关键字、replaceWord){
如果(!关键字)返回targetString
设el=document.createElement('div'))
el.style.display='none'
el.innerHTML=targetString
let walk=document.createTreeWalker(el,NodeFilter.SHOW_TEXT,null,false)
let next=walk.nextNode()
while(下一个){
next.textContent=next.textContent.replaceAll(关键字,replaceWord)
next=walk.nextNode()
}
返回el.innerHTML
}
让test1='我是纯文本'
让test2='我是一个普通的文本'
log(replaceAll2(test1,'pl','1'))
log(replaceAll2(test2,'pl',2'))
一个问题:Test
将被视为一个单词(=Test
)或不被视为一个单词?将html与reg exp匹配是一个坏主意……@Sphinx最好将其视为单词“Test”是,但如果这让事情变得比我想象的更复杂的话,我会非常高兴能得到一个解决方案,并以其他方式加以处理way@epascarello我听说过,但我不知道如何以其他方式执行此任务。如果是这样,可以先获取一个dom元素的所有文本节点,然后使用一个循环来替换每个文本节点的所有文本节点。如果您不关心保留原始html标记,您可以通过元素将元素转换为纯文本。innerText
,然后应用replaceAll
谢谢,这正是我想要的!但是,我现在确实有一个小问题,就是在用html内容替换目标单词时,我假设是由于“next.textContent”行。如果用html内容替换关键字
,标记将被转义。也许这就是你提到的问题。如果html内容
,您可能需要将replaceWord
解析为dom元素,然后使用element.insertBefore
而不是String.replace
。我想,我通过使用第一个replace函数在之后应用html成功地解决了这个问题。再次感谢,我真的很感激!
String.prototype.replaceAll = function (strReplace, strWith) {
// See http://stackoverflow.com/a/3561711/556609
var esc = strReplace.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
var reg = new RegExp(esc, 'ig');
return this.replace(reg, strWith);
};