正则表达式获取body内容

最近项目需要,要弄个正则表达式获取body的内容。

用过angularjs就知道,很多时候要写指令时引用templateUrl的时候。template的内容root是不能包含多个节点的,否则就报错。

这样的规范很不好,很多时候还是想保留template的头,文档类型,css等信息。

所以在开发模式下,希望angularjs加载模板的时候,自动砍掉头部和尾部.

获取之前:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <script src="CssScriptLoader.js"></script>
    <script src="XZClass.js"></script>
</head>
<body>
    <div>内容</div>
</body>
</html>

希望的结果:

<div>内容</div>


所以正则表达式如下:

        var REG_BODY = /<body[^>]*>([\s\S]*)<\/body>/;

        function getBody(content){
            var result = REG_BODY.exec(content);
            if(result && result.length === 2)
                return result[1];
            return content;
        }


这里遇到了个问题,match和exec的区别:

match是返回所有匹配的字符串合成的数组,但是正则表达式必须指定全局g属性才能返回所有匹配,不指定g属性则会返回一个只有一个元素的数组。

exec永远返回与第一个匹配相关的信息,其返回数组包括第一个匹配的字串,所有分组的反向引用。

 

开始的时候,正则表达式后面我加了g,使用了match,死活获取不到括号内的内容,莫名其妙,后面搜了match exec。我去,这两个基友的区别真大!都怪当时看JAVASCRIPT权威指南的时候太傲,忽略了细节。以后绝对要细心。

 

posted @ 2016-01-12 22:25  给力叔  阅读(13388)  评论(2编辑  收藏  举报