用Javascript正则表达式查找>以及<
Javascript regex to find forward slashes between > and <
在Javascript函数中,我需要用/
替换所有不属于HTML标记的正斜杠。
有没有办法使用正则表达式来查找>
和<
之间的所有正斜杠?
不完全是这样,但如果您正处于这种修复中,我想您会对一个快速而肮脏的解决方案感到满意:如果下一个出现的角括号不是闭合角括号,则查找/
。
result = subject.replace(/'/(?![^<>]*>)/g, "/");
当然,这是非常脆弱的——例如,它根本不关心注释、字符串等(然而,使用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(/(<s(tyle|cript)'b['s'S]*?<'/s'2>|<[^>]+>)|'//gi,
function (match, p1, p2) { return (p1)?match:"/"; });
这里有一个很好的例子。首次登陆谷歌:http://james.padolsey.com/javascript/find-and-replace-text-with-javascript/
其基本思想是遍历DOM中的所有节点,并在文本节点中替换文本。此外,不要替换脚本、样式、元数据类型标记中节点中的任何文本。虽然您可以用一个大的regex来实现这一点,但当每个浏览器中都内置了一个dom解析器时,用regex实现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('''/', '/');
相关文章:
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 在<页眉>标签
- 如何更改<svg>标记为<img>用js标记
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- Ajax文件加载和<输入>文件加载
- 如何在chrome扩展中存储数据/结果,以及如何使用setTimeout使其只被调用一次
- 正在删除'<以及那些>'来自javascript中的字符串
- 高亮显示包含<br>以及重新格式化网格
- 访问特定<td>对于给定<tr>以及更改html
- 如何设置<p>元素,以及如何使用按钮重置某个对象的所有对象
- jQuery:添加和删除<br>标签,这取决于窗口宽度以及标签是否已经存在
- 逻辑“>"以及“<"在Jquery函数内部不起作用
- 与<选择>以及DOM注入
- 用Javascript正则表达式查找>以及<
- 在JavaScript中,为什么我的“<"以及“>"可以颠倒比较
- 如何添加背景色以及如何突出<tr>我使用的是数据表1.9.4版本
- <选择><选项>以及与它们相关联的动作
- 阻止CKEditor添加'数据cke已保存'以及转换<
- MomentJS如何将值与>并且<(以及>=,<=)
- Regexp删除</a>以及另一<a>