替换为正则表达式和JavaScript
我正在尝试快速替换'code'元素的'innerHTML'。我想这可能有用:替换为正则表达式和JavaScript,javascript,regex,theory,replace,Javascript,Regex,Theory,Replace,我正在尝试快速替换'code'元素的'innerHTML'。我想这可能有用: function codeDisplay ( ) { var code = document.getElementsByTagName('code').innerHTML; var codeExam1 = new RegExp('<', 'gm'); var codeExam2 = new RegExp('>', 'gm'); code.replace(codeExam1
function codeDisplay ( ) {
var code = document.getElementsByTagName('code').innerHTML;
var codeExam1 = new RegExp('<', 'gm');
var codeExam2 = new RegExp('>', 'gm');
code.replace(codeExam1, '<');
code.replace(codeExam2, '>');
}
功能代码显示(){
var code=document.getElementsByTagName('code').innerHTML;
var codeExam1=新的RegExp(“”,'gm');
代码。替换(代码EXAM1,”);
代码。替换(代码EXAM2,”);
}
我是否需要执行其他步骤将信息推回到浏览器或转换数据类型?还是我完全错误地理解了“RegEx”和“innerHTML”的工作原理?我很感谢您提前给出反馈。使用作业:
code = code.replace(codeExam1, '<');
code = code.replace(codeExam2, '>');
并按如下方式修改代码:
function codeDisplay ( ) {
var codeArray = document.getElementsByTagName('code');
var codeExam1 = new RegExp('<', 'gm');
var codeExam2 = new RegExp('>', 'gm');
for ( var i = 0 ; i < codeArray.length ; ++i ){
var code = codeArray[i].innerHTML;
code.replace(codeExam1, '<');
code.replace(codeExam2, '>');
codeArray[i].innerHTML = code;
}
}
功能代码显示(){
var codeArray=document.getElementsByTagName('code');
var codeExam1=新的RegExp(“”,'gm');
对于(变量i=0;i
Replace返回一个包含结果的新字符串。例如,见。
要实际替换code
的内容,您的代码必须如下所示:
function codeDisplay ( ) {
var code = document.getElementsByTagName('code').innerHTML;
var codeExam1 = new RegExp('<', 'gm');
var codeExam2 = new RegExp('>', 'gm');
code = code.replace( codeExam1, '<');
code = code.replace(codeExam2, '>');
document.getElementsByTagName('code').innerHTML = code;
}
功能代码显示(){
var code=document.getElementsByTagName('code').innerHTML;
var codeExam1=新的RegExp(“”,'gm');
代码=代码。替换(代码EXAM1,”);
代码=代码。替换(代码EXAM2,”);
document.getElementsByTagName('code')。innerHTML=code;
}
或者更简短的版本(可能更简短,但在我看来只是以可读性为代价):
功能代码显示(){
var code=document.getElementsByTagName('code').innerHTML;
code=code.replace(//gm',);
document.getElementsByTagName('code')。innerHTML=code;
}
试试这个:
function codeDisplay ( ) {
var s = document.getElementsByTagName('code').innerHTML;
s = s.replace(/\</g,'<');
s = s.replace(/\>/g,'>');
document.getElementsByTagName('code').innerHTML = s;
}
功能代码显示(){
var s=document.getElementsByTagName('code').innerHTML;
s=s.替换(/\/g,”);
document.getElementsByTagName('code')。innerHTML=s;
}
因此,首先:
var code = document.getElementsByTagName('code').innerHTML;
返回元素列表,而不仅仅是一个。因此,如果您的目的是转义页面中的所有code
标记,则需要迭代它们。
其次,我相信您可以避免只使用textContent
(如果支持)或innerText
var codes = document.getElementsByTagName("code");
for (var i = 0, code; code = codes[i++];) {
if ("textContent" in code)
code.textContent = code.innerHTML;
else if ("innerText" in code)
code.innerText = code.innerHTML;
}
或创建新的文本节点:
var codes = document.getElementsByTagName("code");
for (var i = 0, code, html; code = codes[i++];) {
html = code.innerHTML;
code.innerHTML = "";
code.appendChild(document.createTextNode(html));
}
这就是应该转义每个html实体的原因。如果您仍然想使用regexp,可能作为备用,您可以使用以下函数:
var escapeEntities = (function(){
var entities = {"<" : "lt", ">" : "gt", "&" : "amp" };
var re = new RegExp("[" + Object.keys(entities).join("") + "]", "g");
function replaceEntities(match) {
return match in entities ? "&" + entities[match] + ";" : match;
}
return function(value) {
return value.replace(re, replaceEntities);
}
})()
注意,如果不支持,可以轻松使用垫片(如链接中所示);或者只需手动替换您支持的实体列表:
var entities = {"<" : "lt", ">" : "gt", "&" : "amp" };
var re = /[<>&]/g;
var实体={'':“gt”、“&”:“amp”};
var re=/[&]/g;
在这种情况下,您需要记住在实体
和re
变量中添加您希望在将来支持的新实体Object.keys
只是帮助你进行维护。我是不是遗漏了什么,或者是像在指甲上使用大锤一样的正则表达式?你可能想写code=code。替换(/&/g,,&;)
甚至在
步骤之前。@BradChristie-你还会怎么做?字符串替换只找到第一个字符串。你真的认为code.split('>').join('')
更好吗?我尝试将其加载到body onLoad属性中,但仍然不起作用。我认为问题在于'document.getElementsByTagName('code')
'返回数组,因此需要使用document.getElementsByTagName('code')[0]
相反。或者,如果您有多个“code”元素,请使用循环替换所有这些元素的内容。您可以使用CSS设置整个块的样式。所以你可以有:code{背景:银色;边框:1px纯色灰色}
等等。让我问你这个问题。如果我转换成文本,我还能用css来设计它吗?我想我可以试试。非常感谢您的深入解释
code.innerHTML = escapeEntities(code.innerHTML);
var entities = {"<" : "lt", ">" : "gt", "&" : "amp" };
var re = /[<>&]/g;