我想使用JavaScript替换HTML页面中的字符串但忽略它,如果它在HTML标记中,例如:
<a href="google.com">visit google search engine</a>
you can search on google tatatata...
我想将google
替换为<b>google</b>
,但不是取代:
<a href="google.com">visit google search engine</a>
you can search on <b>google</b> tatatata...
我试过这个:
regex = new RegExp(">([^<]*)?(google)([^>]*)?<", 'i');
el.innerHTML = el.innerHTML.replace(regex,'>$1<b>$2</b>$3<');
但问题是:我在<b>google</b>
代码中获得了<a>
:
<a href="google.com">visit <b>google</b> search engine</a>
you can search on <b>google</b> tatatata...
如何解决这个问题?
答案 0 :(得分:6)
你最好使用html解析器而不是正则表达式。我不确定它是否可以100%可靠地完成。
答案 1 :(得分:5)
您可能会或可能不会使用正则表达式。这取决于您可以精确定义条件。说你想要更换字符串,除非它在HTML标签中的范围不够窄,因为页面上的所有内容都可能在某些HTML标记内(如果没有其他内容则为BODY)。
为此遍历DOM树可能会更好,而不是尝试在HTML上使用正则表达式。
答案 2 :(得分:1)
你真的不能那样做,你的“谷歌”总是在某个标签中,要么全部替换,要么全部没有
答案 3 :(得分:1)
使用正则表达式解析HTML对于除了微不足道的情况之外的任何事情都不容易,因为 HTML不是常规的。
有关详细信息,请参阅this Stackoverflow question(和答案)。
答案 4 :(得分:1)
我想你们都错过了这个问题......
当他在标签内部说出来时,他意味着在开始标签内部,就像在&lt; a href =“google.com”&gt;中一样。 tag ...这是与文本完全不同的东西,例如,在&lt; p&gt;内。 &LT; / p为H.标签对或&lt; body&gt; &LT; /体取代。虽然我还没有答案,但我正在努力解决同样的问题,我知道它必须能够使用正则表达式来解决。一旦我搞清楚,我会回来发布。
答案 5 :(得分:1)
解决方法强>
如果你不能使用html解析器或对你的html结构非常有信心,试试这个:
这是一个简单的解决方法,但对我有用。
缺点? 嗯......你必须为这个案子做两次替换...... ...&gt;因为它只从页面上的每个标签中删除第一个不需要的标签
[编辑:] 的解强>
为什么不使用jQuery,将html代码放入页面并执行以下操作:
$(containerOrSth).find('a').each(function(){
if($(this).children().length==0){
$(this).text($(this).text().replace('google','evil'));
}else{
//here You have to care about children tags, but You have to know where to expect them - before or after text. comment for more help
}
});
答案 6 :(得分:0)
好吧,因为一切都是标签的一部分,所以你的要求没有任何意义。如果它只是<a />
标记,您可能只是检查该部分。主要是确保在新</a>
<a>
标记
答案 7 :(得分:0)
您可以使用REGEX执行此操作,但过滤块(如STYLE,SCRIPT和CDATA)需要更多工作,而不是在以下解决方案中实现。
大多数答案都说'你的数据总是在某些标签中',但它们缺少这一点,数据总是在某些标签之间“,你想过滤它在标签中的位置。” / p>
请注意,内联脚本中的标记字符可能会破坏它,因此如果它们存在,则应使用此方法单独处理它们。看看这里:
complex html string.replace function
答案 8 :(得分:0)
我正在使用
regex = new RegExp("(?=[^>]*<)google", 'i');