Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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字符串会删除一个/&引用;从我的br标签_Javascript_Regex_Str Replace - Fatal编程技术网

为什么使用正则表达式替换javascript字符串会删除一个/&引用;从我的br标签

为什么使用正则表达式替换javascript字符串会删除一个/&引用;从我的br标签,javascript,regex,str-replace,Javascript,Regex,Str Replace,我正在使用带有超级简单正则表达式的javascript来替换“您的脚本还可以 如果您尝试以下方法: <pre><code id="cleanme"> <p><br />this is some code</p> </code></pre> var str='这是一些代码; str=str.replace(//g,“”); document.getElementById(“cleanme”).innerHTML=

我正在使用带有超级简单正则表达式的javascript来替换“您的脚本还可以

如果您尝试以下方法:

<pre><code id="cleanme">
<p><br />this is some code</p>
</code></pre>
var str='
这是一些代码; str=str.replace(//g,“”); document.getElementById(“cleanme”).innerHTML=str;
它将正确打印


这可能是浏览器HTML规范化的结果。

我认为这与某些浏览器返回innerHTML属性的方式有关。如果使用Google Chrome,请使用调试工具检查任何
标记,您会发现它们没有显示反斜杠。当Chrome返回innerHTML属性时也是如此,黑色斜杠是绊倒了

所以当你通过时:



这是一些代码

浏览器返回的innerHTML属性为:



这是一些代码


您的正则表达式不是问题所在。

innerHTML不返回文本源代码,而是浏览器对其解释的结果

不同的浏览器会为innerHTML返回非常不同的结果,有时会省略一些引号和“可选”结束标记,将一些标记名和属性大写,并折叠额外的空白


HTML不会关闭不能包含结束标记的打开标记,因此它们也不包括在内。

可能太晚了,无法帮助您,您已经接受了正确的答案,但还有一个潜在的大问题。 我在Linux上的Firefox 3.6.11和Windows上的Firefox 3.6.12上尝试了这一点,它们的行为都是一样的--

我没有在你的小提琴上的结果窗格中看到

这是一些代码,而我看到的只是
这是一些根本没有标记的代码

通过添加一个
调试器;
语句作为JavaScript窗格中的第一行并对其进行跟踪,我发现
str
得到的值是
'\n'
,也就是说,只从
innerHTML
返回了一个换行符,没有其他内容

考虑到这一点,但没有办法确认,我怀疑这是因为Firefox构建DOM树的方式与您预期的不同,因为您使用的HTML无效。内联元素不允许包含块元素;具体地说,
标记不允许包含
标记和
>同样,也不允许包含
标记——同样,在
标记中只能使用有限的内联元素)


我认为FF是在打开段落之前隐式关闭代码块,因此
id=“cleanme”
的innerHTML只不过是换行符“字体如您所料,因为您已将浏览器置于怪癖模式。

您如何看待它仅返回
?javascript警报?chrome inspect元素?通过浏览器在网页中实现,也通过JSFIDLE中的“结果”面板,以及javascript警报。啊,我明白你的意思了。除了innerHTML之外,还有其他属性可以获取准确的代码,而不是浏览器对代码的解释吗?如果jQuery让事情变得更简单的话,我不会反对它。反斜杠:Unicode U+005C='\'对于chrome,我认为这并没有什么意义……至少我知道。如果你不想让浏览器弄乱
块,请在服务器端转义它。我现在也看到了。谢谢不知道我是否可以将代码包装在一个div中,使用id=“cleanme”,然后首先运行js,替换,然后让js添加到pre和code开始和结束标记中。不知道这是否有帮助。只是在Firefox4上检查了它,它的工作原理和我在Chrome上的一样。必须是FF的旧版本。尽管如此,我还是会尝试这样修复它:
document.getElementById(“cleanme”).innerHTML=“”我把“cleanme”变成了div
<pre><code id="cleanme">
<p><br />this is some code</p>
</code></pre>
<p><br>this is some code</p>
var str = '<p><br />this is some code</p>';
str=str.replace(/</g,"&lt;");
str=str.replace(/>/g,"&gt;");
document.getElementById("cleanme").innerHTML = str;
<pre><code id="cleanme">
<p><br />this is some code</p>
</code></pre>
<pre><code id="cleanme">
<p><br>this is some code</p>
</code></pre>