Javascript正则表达式忽略div span标记
我有下面的文字Javascript正则表达式忽略div span标记,javascript,html,regex,regex-group,Javascript,Html,Regex,Regex Group,我有下面的文字 是一个 我想把an改成a,我使用下面的正则表达式模式来实现这一点 const regExFinder = new RegExp("an", 'gi'); const sourceHTML = "<span> is an </span>"; sourceHTML.replace(regExFinder, `$&`); 常量regExFinder=newregexp(“an”,“gi”); const sourceHTML=“是一个”; replac
是一个
我想把an改成a,我使用下面的正则表达式模式来实现这一点
const regExFinder = new RegExp("an", 'gi');
const sourceHTML = "<span> is an </span>";
sourceHTML.replace(regExFinder, `$&`);
常量regExFinder=newregexp(“an”,“gi”);
const sourceHTML=“是一个”;
replace(regExFinder,`$&`);
但是输出是这样的。有谁能告诉我如何忽略任何标记,只更改标记内的文本
<spa> is a </spa>
是一个
如果我的源HTML如下所示:
<div> an <span> is an </span></div>
an是一个
您可以检查此解决方案。我已经从字符串中删除了所有html标记,然后应用了替换操作。它将适用于您的两个测试用例
常量regExFinder=newregexp(“an”,“gi”);
让sourceHTML=“an是一个”;
sourceHTML=sourceHTML.replace(/]*>?/gm',).trim();//删除HTML标记
sourceHTML=sourceHTML.replace(regExFinder,'a');
log(sourceHTML)您有两个选项
const str = "<div> an <span> is an </span></div>";
// method 1: negative lookaheads (probably the best for regex)
str.replace(/an(?![^<>]*>)/gi, "a");
// method 2: rely on having a space after the "an" (not reliable)
str.replace(/an /gi, "a ")
// method 3: rely on "an" being its own word (depends on the situation)
str.replace(/\ban/gi, "a")
const str=“an是一个”;
//方法1:负外观heads(可能最适合正则表达式)
str.replace(/an(?![^]*>)/gi,“a”);
//方法2:依靠“安”后有一个空格(不可靠)
str.replace(/an/gi,“a”)
//方法三:依靠“安”字(视情况而定)
str.replace(/\ban/gi,“a”)
我将整个字符串解析为一个DOM元素,然后遍历所有span元素,将其内容从“an”更改为“a”,正则表达式中的元字符\b
表示单词边界
编辑:
在深入挖掘之后,我现在可以操作所有文本节点并更改相关字符串:
var html='an是一个苹果,这是一个香蕉';
var b=document.createElement('body');
b、 innerHTML=html;
//使用“可选过滤器功能”进行更改:
getTextNodesIn(b,n=>n.textContent=n.textContent.replace(/\ban\b/g,'a'));
//输出:
log(b.innerHTML);
//我刚刚意识到我也可以使用Chris West的原始功能:
// https://cwestblog.com/2014/03/14/javascript-getting-all-text-nodes/
函数getTextNodesIn(elem,opt_fnFilter){
var textNodes=[];
if(elem){
对于(var nodes=elem.childNodes,i=nodes.length;i--;){
var node=nodes[i],nodeType=node.nodeType;
if(节点类型==3){
if(!opt_fnFilter | | opt_fnFilter(节点,元素)){
textNodes.push(节点);
}
}
else if(节点类型==1 | |节点类型==9 | |节点类型==11){
textNodes=textNodes.concat(getTextNodesIn(node,opt_fnFilter));
}
}
}
返回文本节点;
}
不应使用regexp操作HTML代码。使用DOM模型,对实际的
元素进行操作。有没有代码示例来说明如何执行此操作?我想他正在寻找替换所有“an”的方法,而不仅仅是替换span中的那些。是的,我的代码片段将只对
标记中的文本部分进行操作。