我正在尝试编写一个简单的函数,该函数可遍历文本并替换文本中遇到的所有href;
if (webSource.grab()) {
try {
webSource.retrieve(frame);
Graphics g = jPanel1.getGraphics();
faceDetector.detectMultiScale(frame, faceDetections);
for (Rect rect : faceDetections.toArray()) {
// System.out.println("ttt");
Core.rectangle(frame, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height),
new Scalar(0, 255,0));
}
Highgui.imencode(".bmp", frame, mem);
Image im = ImageIO.read(new ByteArrayInputStream(mem.toArray()));
BufferedImage buff = (BufferedImage) im;
if (g.drawImage(buff, 0, 0, getWidth(), getHeight()-150 , 0, 0, buff.getWidth(), buff.getHeight(), null)) {
if (runnable == false) {
System.out.println("Paused ..... ");
this.wait();
}
}
} catch (Exception ex) {
System.out.println("Error!!");
ex.printStackTrace();
}
}
}
我觉得我可能没有正确使用match方法或条件运算符,但据我了解,这应该可以工作。但是,当然不是。
答案 0 :(得分:0)
如果您要替换文本中的链接(我想),请尝试以下正则表达式:
/<a.*?href="www.anyhref.com".*?\/a>/g
然后,您需要为要替换数组中的条目的每个href添加。
答案 1 :(得分:0)
如果您在DOM上下文中,则可以执行以下操作:
要遍历DOM,可以使用以下功能:
function domReplace(node, iterator) {
switch (node && node.nodeType) {
case 1: case 9: case 11: {
const newNode = iterator((node.nodeName || '').toLowerCase(), node);
if (newNode && newNode != node && node.parentNode) {
node.parentNode.insertBefore(newNode, node);
node.parentNode.removeChild(node);
}
for (let child = newNode.firstChild; child; child = child.nextSibling)
domReplace(child, iterator);
} break ;
case 3: {
const newNode = iterator('#text', node);
if (newNode && newNode != node && node.parentNode) {
node.parentNode.insertBefore(newNode, node);
node.parentNode.removeChild(node);
}
} break ;
}
}
然后,如果模式与自定义文本匹配a
,则可以替换.href
:
domReplace(document, (type, node) => {
if (type == 'a') {
for (let i = 0; i < REPLACE.length; i += 1)
if (~(node.href || '').indexOf(REPLACE[i].expression))
return document.createTextNode(REPLACE[i].value);
return document.createTextNode(node.href);
}
return node;
});
请注意,您不应将document
赋予domReplace
,而应使用正确的dom节点,以避免整个页面替换