困惑 :escape \ or not /\ in javascript's regular expression
Confused :escape \ or not /\ in javascript's regular expression
从字符串中提取 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部分。
有一整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 文档时失败,因为您要在表达式中间终止脚本元素。
从字符串中提取 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部分。
有一整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 文档时失败,因为您要在表达式中间终止脚本元素。