Javascript正则表达式以查找>;及<;
在Javascript函数中,我需要用Javascript正则表达式以查找>;及<;,javascript,regex,Javascript,Regex,在Javascript函数中,我需要用/替换所有不属于HTML标记的前斜杠 是否有任何方法可以使用正则表达式来查找和之间的所有正斜杠不完全正确,但如果您处于这种修复中,我想您会很高兴找到一个快速而肮脏的解决方案:如果下一个出现的角括号不是闭合角括号,则查找/ result = subject.replace(/\/(?![^<>]*>)/g, "/"); result=subject.replace(/\/(?![^]*>)/g,&x2F); 当然,
/
替换所有不属于HTML标记的前斜杠
是否有任何方法可以使用正则表达式来查找
和之间的所有正斜杠不完全正确,但如果您处于这种修复中,我想您会很高兴找到一个快速而肮脏的解决方案:如果下一个出现的角括号不是闭合角括号,则查找/
result = subject.replace(/\/(?![^<>]*>)/g, "/");
result=subject.replace(/\/(?![^]*>)/g,&x2F);
当然,这是非常脆弱的-例如,它根本不关心注释、字符串等(然而,使用regex实现这一点非常困难)。您可以测试:
html ='<a href="/sdfsdf/SD/sdfsf">toto/tata</a>';
html = html.replace(/(<[^>]+>)|\//g,
function (match, p1) { return (p1)?match:"/"; });
console.log (html);
html=”;
html=html.replace(/(]+>)\//g,
函数(match,p1){return(p1)?match:/”};
console.log(html);
其思想是在尝试匹配斜杠之前捕获所有html标记(并自行替换)。然后,回调函数测试第一个捕获组是否存在,并返回完全匹配或替换
您可以提高此模式的安全性,以处理样式和脚本内容,如下所示:
html = html.replace(/(<s(tyle|cript)\b[\s\S]*?<\/s\2>|<[^>]+>)|\//gi,
function (match, p1, p2) { return (p1)?match:"/"; });
html=html.replace(/()\//gi,
函数(match,p1,p2){返回(p1)}匹配:/;};
这是一个很好的例子。谷歌的第一次成功:
基本思想是迭代DOM中的所有节点,并替换文本节点中的文本。另外,不要替换脚本、样式、元数据类型标记中节点中的任何文本。虽然您可以使用一个大的正则表达式来实现这一点,但在每个浏览器中都内置了dom解析器的情况下,在正则表达式中实现dom解析器并没有多大意义
function findAndReplace(searchText, replacement, searchNode) {
if (!searchText || typeof replacement === 'undefined') {
// Throw error here if you want...
return;
}
var regex = typeof searchText === 'string' ?
new RegExp(searchText, 'g') : searchText,
childNodes = (searchNode || document.body).childNodes,
cnLength = childNodes.length,
excludes = 'html,head,style,title,link,meta,script,object,iframe';
while (cnLength--) {
var currentNode = childNodes[cnLength];
if (currentNode.nodeType === 1 &&
(excludes + ',').indexOf(currentNode.nodeName.toLowerCase() + ',') === -1) {
arguments.callee(searchText, replacement, currentNode);
}
if (currentNode.nodeType !== 3 || !regex.test(currentNode.data) ) {
continue;
}
var parent = currentNode.parentNode,
frag = (function(){
var html = currentNode.data.replace(regex, replacement),
wrap = document.createElement('div'),
frag = document.createDocumentFragment();
wrap.innerHTML = html;
while (wrap.firstChild) {
frag.appendChild(wrap.firstChild);
}
return frag;
})();
parent.insertBefore(frag, currentNode);
parent.removeChild(currentNode);
}
}
然后使用它
findAndReplace('\\/', '/');
重复的问题@DMoses我不相信这是一个重复的问题。这样行吗?body_text=body_text.replace(/(?@Charlie你说得对。这个问题甚至没有给出一个有效的答案。@WarrenSchubert:它不能工作,因为javascript正则表达式没有查找功能(即(?谢谢,我认为这可能适用于此应用程序;我将尝试它。这将替换脚本和样式标记中可能会导致问题的/
。是的,您可能还希望跳过以下内容:
和
有关HTML5的解析方式,请参阅。