javascript - 混淆 :escape \ or not /\ in javascript 的正则表达式
问题描述
要从字符串中提取 html 部分:
在正则表达式中使用转义:
RegExp('<script type="text\/javascript">[^]+<\/script>');
var content = '<p>test</p><script type="text/javascript">somany lines and \n\
so many lines</scr' + 'ipt>';
var reg_escape = new RegExp('<script type="text\/javascript">[^]+<\/scr' + 'ipt>');
var onlyHtml = content.replace(reg_escape,"");
alert(onlyHtml);
在正则表达式中没有转义:
RegExp('<script type="text/javascript">[^]+</script>');
var content = '<p>test</p><script type="text/javascript">somany lines and \n\
so many lines</scr' + 'ipt>';
var reg_escape = new RegExp('<script type="text/javascript">[^]+</scr' + 'ipt>');
var onlyHtml = content.replace(reg_escape,"");
alert(onlyHtml);
他们都得到相同的结果——只提取 html 部分。现在在正则表达式中有一个带有转义的整个 html 文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style type='text/css'>
div#html{
border:1px solid red;
height:80px;
width:80px;
float:left;
}
div#content{
clear:both;
width:400px;
height:400px;
border:1px solid black;
}
</style>
</head>
<body>
<div id='html'>html</div>
<div id='content'>
</div>
<script type='text/javascript'>
var html_string = document.body.innerHTML;
var content = document.getElementById('content');
var ob_html = document.getElementById('html');
var reg = new RegExp('<script type="text\/javascript">[^]+<\/script>');
var onlyHtml = html_string.replace(reg,"");
alert(onlyHtml);
</script>
</body>
</html>
另存为with_escape.html
并使用浏览器打开它,您从with_escape.html
.
正则表达式中有一个没有转义的整个 html 文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style type='text/css'>
div#html{
border:1px solid red;
height:80px;
width:80px;
float:left;
}
div#content{
clear:both;
width:400px;
height:400px;
border:1px solid black;
}
</style>
</head>
<body>
<div id='html'>html</div>
<div id='content'>
</div>
<script type='text/javascript'>
var html_string = document.body.innerHTML;
var content = document.getElementById('content');
var ob_html = document.getElementById('html');
var reg = new RegExp('<script type="text/javascript">[^]+</script>');
var onlyHtml = html_string.replace(reg,"");
alert(onlyHtml);
</script>
</body>
</html>
另存为without_escape.html
并使用浏览器打开它,您无法从中提取html部分without_escape.html
。出现错误:
\
为什么在前面的代码片段中,不管是否逃逸/\
?
解决方案
在 JS 字符串字面量中/
和\/
意思完全一样。
在 HTML 文档</script>
中是脚本元素的结束标记,但<\/script>
不是。
\
当您将其嵌入 HTML 文档时,没有该版本的版本会失败,因为您在表达式中间终止了脚本元素。
推荐阅读
- javascript - D3 - 将 svg 图标附加到图形
- javascript - 使用 Cypress/WebDriverIO 在自定义 Docker 映像中进行无头测试
- apache-kafka - 使用 Docker Compose 创建 Kafka-Connect 集群以供 ksqlDB 使用
- python - Python从不同的列表中获取最大绝对值
- curl - android ndk + curl / localhost 文件下载问题
- c# - 在此上下文上启动了第二个操作,即使上下文声明为 trainsent
- android - Android D/DecorView: semSetRoundedCorners: 5 Infinite Log
- visual-studio-code - VS Code - 如何为工作区选择 Jupyter Kernel?
- javascript - 如何在 JavaScript 中同步使用 FileReader.readAsText 读取文件?
- python - 将列表转换为列名