我试图替换所有出现的??? some.text.and.dots ??? 在html页面中添加链接.我已经构建了这个正则表达式:
\?\?\?([A-Z0-9]*)\?\?\?
但是,我想排除链接中的任何结果:" ...我的模式...... ",我对如何做到这一点有点困惑,所有我的尝试暂时失败了.
你正在研究什么样的"HTML"并不是很清楚.如果它是HTML 代码,可能来自Ajax请求,那么你可以使用正则表达式; 匹配链接或模式,然后找出在回调中要做的事情:
var html = document.body.innerHTML; html = html.replace(/(.*?<\/a>)|(\?\?\?([a-z0-9.]*)\?\?\?)/g, function ( a, b, c, d ) { return ( a[0] == '<' ) ? a : '' + d + ''; }); context.innerHTML = html;
方便的是,replace()
可以将回调函数作为替换生成器而不是简单的字符串.
但是,如果您正在处理实时DOM树,则可能需要尊重节点上的事件而不是简单地重置事件innerHTML
.你需要一个更原始的方法:
// returns all childnodes of type text that do not have A as parent function walker ( node ) { var nodes = []; for (var c, i = 0; c = node.childNodes[i]; i++) { if ( c.nodeType === 1 && c.tagName !== 'A' ) { nodes = nodes.concat( arguments.callee( c ) ); } else if ( c.nodeType === 3 ) { nodes.push( c ); } } return nodes; } var textNodes = walker( document.body ); for (var i = 0; i < textNodes.length; i++) { // create an array of strings separating the pattern var m = textNodes[i].nodeValue.split( /(\?\?\?([a-z0-9.]*)\?\?\?)/ ); if ( m.length > 1 ) { for (var j=0; j此方法仅触及文本节点,然后仅触摸与模式匹配的文本节点.