如何解决javascript的正则表达式中混淆了:escape \或不/ \
要从字符串中提取html部分:
在正则表达式中带有转义符:
RegExp('<script type="text\/javascript">[^]+<\/script>');
在正则表达式中不能转义:
RegExp('<script type="text/javascript">[^]+</script>');
它们两个都得到相同的结果-仅提取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
并用浏览器将其打开,您将无法从without_escape.html
中提取html部分。发生错误:
为什么在以前的代码片段中,是否将\
转换为/\
无关?
解决方法
在JS字符串文字/
和\/
中,含义完全相同。
在HTML文档中,</script>
是脚本元素的结束标记,而<\/script>
不是。
将\
嵌入到HTML文档中时,没有版本的{{1}}会失败,因为您要在表达式中间终止脚本元素。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。