这是this one
的后续问题由于javascript正则表达式与.net正则表达式(我习惯)有很大不同,我似乎无法弄清楚如何增强这个正则表达式。
这是目前的模式:
var pattern = new RegExp('\\b' + filter[i] + '\\b', 'g');
当短语单独存在但是如果它位于锚标记中时,这种方法很有效,该方法最终会移除整个锚点(这是不可取的)。
实施例
<body>
This is my text. It's an ass of a time in class
<a href="http://example.com/1234/ass-hole">ass-hole</a>
</body>
显示为
<body> This is my text. It's an *** of a time in class ***-hole </body>
DOM中的
我希望它看起来像
<body>
This is my text. It's an *** of a time in class
<a href="http://example.com/1234/***-hole">***-hole</a>
</body>
答案 0 :(得分:3)
看起来$('body').text(function (i, txt) { ... });
在一个大块中为您提供了body元素的内部文本,并且已经删除了所有标记。换句话说,您的正则表达式不会删除标记,但$('body').text
是。
听起来你真的想要循环身体的后代子文本节点。我不熟悉jQuery,也许它有另一个功能为你做这个,但如果没有,你可以使用这个:
function allTextNodes(parent) {
function getChildNodes(parent) {
var x, out = [];
for (x = 0; x < parent.childNodes.length; x += 1) {
out[x] = parent.childNodes[x];
}
return out;
}
var cursor, closed = [], open = getChildNodes(parent);
while (open.length) {
cursor = open.shift();
if (cursor.nodeType === 1) {
open.unshift.apply(open, getChildNodes(cursor));
}
if (cursor.nodeType === 3) {
closed.push(cursor);
}
}
return closed;
}
使用该功能(或类似功能),请尝试使用此功能:
(function () {
var x, i, re, rep,
nodes = allTextNodes(document.body),
filter = [ 'some', 'words', 'go', 'here' ];
for (x = 0; x < nodes.length; x += 1) {
for (i = 0; i < filter.length; i += 1) {
re = new RegExp('\\b' + filter[i] + '\\b', 'g');
rep = '****'; // fix this
if (re.test(nodes[x].nodeValue)) {
nodes[x].nodeValue = nodes[x].nodeValue.replace(re, rep);
}
}
}
}());
思考的食物:如果你的过滤词包含一个在正则表达式中有意义的字符,会发生什么?在这种情况下似乎不太可能,但你应该认为它都是一样的。
答案 1 :(得分:1)
Regex无法用于删除您声称删除的内容。问题是输入不是你声称的那样。如果你添加
alert(txt);
到你的功能,你会看到你实际上正在传递
This is my text. It's an ass of a time in class ass-hole
到它。这是正文的文本。也许你想要它的 innerHTML 。
下次,请预先发布最小的,可运行的问题演示。当你说你在替换时遇到问题并且代码没有执行任何替换时,这真的很糟糕。
答案 2 :(得分:0)
这里的问题是因为你在两边都匹配\ b作为一个单词。这意味着它必须被某些字符包围,并且'&gt;'不是其中之一。
因此,在您的代码中,您需要更改正则表达式以允许'&gt;'存在于左侧,可能是'&lt;'存在于右边。
var pattern = new RegExp('(\ b |&gt;)'+ filter [i] +'(\ b |&lt;)','g');
可能非常接近你需要的东西。
可在此处找到真正的javascript REGEXP:http://www.javascriptkit.com/javatutors/redev2.shtml