我有一些奇怪的问题“改进”书签。 我从here获取了这个例子 - 它需要一个正则表达式并突出显示与表达式匹配的页面上的文本 - 我已经重新格式化它以便使用JSMin for Notepad ++轻松阅读:
javascript : (function () {
var count = 0,
text,
regexp;
text = prompt("Search regexp:", "");
if (text == null || text.length == 0)
return;
try {
regexp = new RegExp("(" + text + ")", "i");
} catch (er) {
alert("Unable to create regular expression using text '" + text + "'.\n\n" + er);
return;
}
function searchWithinNode(node, re) {
var pos,
skip,
spannode,
middlebit,
endbit,
middleclone;
skip = 0;
if (node.nodeType == 3) {
pos = node.data.search(re);
if (pos >= 0) {
spannode = document.createElement("SPAN");
spannode.style.backgroundColor = "yellow";
middlebit = node.splitText(pos);
endbit = middlebit.splitText(RegExp.$1.length);
middleclone = middlebit.cloneNode(true);
spannode.appendChild(middleclone);
middlebit.parentNode.replaceChild(spannode, middlebit);
++count;
skip = 1;
}
} else if (node.nodeType == 1 && node.childNodes && node.tagName.toUpperCase() != "SCRIPT" && node.tagName.toUpperCase != "STYLE") {
for (var child = 0; child < node.childNodes.length; ++child) {
child = child + searchWithinNode(node.childNodes[child], re);
}
}
return skip;
}
window.status = "Searching for " + regexp + "...";
searchWithinNode(document.body, regexp);
window.status = "Found " + count + " match" + (count == 1 ? "" : "es") + " for " + regexp + ".";})();
以下是对单击突出显示的前10行的定制改进:
javascript : (function () {
var count = 0,
regexp;
try {
regexp = /\bwho\b|\bwhom\b|\blay\b|\blie\b|\bmoot\b|\bcontinual\b|\bcontinuous\b|\benvy\b|\bjealousy\b|\benvious\b|\bjealous\b|\bnor\b|\bmay\b|\bmight\b|\bwhether\b|\bfewer\b|\bless\b|\bdisinterested\b|\buninterested\b|\bdifferent than\b|\bimpactful\b|\baffect\b|\beffect\b|\birony\b|\bironic\b|\bnauseous\b/i;
} catch (er) {
alert("Unable to create regular expression\n\n" + er);
return;
}
...
第一部作品,第二部作品没有。第一个甚至在将表达式从第二个复制到提示符时起作用。
当第二次运行时,浏览器消耗CPU一段时间,然后突出显示深蹲。第一个是近乎即时的。 IE9 / Chrome17 / FF10之间的行为似乎没有区别。在第二个中使用新的正则表达式(...)没有帮助 - 我使用斜杠表示法来节省必须双击其余部分,使其更不易读。
有人愿意指出我的错误吗?
答案 0 :(得分:0)
你在表达中遗漏了“(”和“)”。
这适用:regexp = /(\ bwho \ b | \ bwhom \ b | \ blay \ b | \ blie \ b | \ bmoot \ b | \ bcontinual \ b | \ bcontinuous \ b | \ benvy \ b | \ bjealousy \ C | \ benvious \ C | \ bjealous \ C | \ bnor \ C | \ bmay \ C | \ bmight \ C | \ bwhether \ C | \ bfewer \ C | \保佑\ C | \ bdisinterested \ C | \ buninterested \ b | \ bdifferent比\ b | \ bimpactful \ b | \ baffect \ b | \ beffect \ b | \ birony \ b | \ bironic \ b | \ bnauseous \ b)/ i;
如果你问我为什么括号是必要的,我不知道。与下游代码相关的是我有根据的猜测。我所做的就是比较原始代码和代码之间的不同之处;考虑到输入到输入框时表达式有效。