Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
替换为正则表达式和JavaScript_Javascript_Regex_Theory_Replace - Fatal编程技术网

替换为正则表达式和JavaScript

替换为正则表达式和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

我正在尝试快速替换'code'元素的'innerHTML'。我想这可能有用:

function codeDisplay ( ) {
    var code = document.getElementsByTagName('code').innerHTML;

    var codeExam1 = new RegExp('<', 'gm');
    var codeExam2 = new RegExp('>', 'gm');

    code.replace(codeExam1, '&lt;');
    code.replace(codeExam2, '&gt;');
      }
功能代码显示(){
var code=document.getElementsByTagName('code').innerHTML;
var codeExam1=新的RegExp(“”,'gm');
代码。替换(代码EXAM1,”);
代码。替换(代码EXAM2,”);
}
我是否需要执行其他步骤将信息推回到浏览器或转换数据类型?还是我完全错误地理解了“RegEx”和“innerHTML”的工作原理?我很感谢您提前给出反馈。

使用作业:

code = code.replace(codeExam1, '&lt;');
code = code.replace(codeExam2, '&gt;');
并按如下方式修改代码:

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, '&lt;');
        code.replace(codeExam2, '&gt;');
        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, '&lt;');
  code = code.replace(codeExam2, '&gt;');

  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,'&lt;');
  s = s.replace(/\>/g,'&gt;');
  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;