Javascript正则表达式修饰符

4
这段代码获取HTML数据并应该替换所有JavaScript内容。
$.ajax({
    url: url,
    success: function(data){
        data = data.replace(/<script.*?<\/sc/mg,'');
        alert(data);
    },
    dataType: 'html'
});

但是在 data 中有待执行的 JavaScript 代码。

.....</div><!-- end header -->
<div id="snapshot">
    <a href="?cat=<div style=&panel=center" id="leftNav" class="navlink"><i class="icon-previous icon-large white"></i></a>

    <a href="?cat=<div style=&panel=left" id="rightNav" class="navlink"><i class="icon-next icon-large white"></i></a>
<script type="text/javascript">
$(document).ready(function() {
    $('body').append('<div id="loaded_page"></div>');
    url = $('#leftNav').attr('href')
    $.ajax({
        url: url,
        success: function(data){
            data = data.replace(/<script.*?<\/sc/mgi,'');
            alert(data);
        },
        dataType: 'html'
    });

    return;
</script>
    ....................

所以我需要的结果是:
.....</div><!-- end header -->
<div id="snapshot">
    <a href="?cat=<div style=&panel=center" id="leftNav" class="navlink"><i class="icon-previous icon-large white"></i></a>

    <a href="?cat=<div style=&panel=left" id="rightNav" class="navlink"><i class="icon-next icon-large white"></i></a>

所有的 JavaScript 代码都应该被删除。正则表达式 data.replace(/<script.*?<\/sc/mg,'') 可以替换只存在一行的内容。


1
你需要用什么数据格式来进行正则表达式匹配? - Bogdan Emil Mariesan
正则表达式不起作用,应该将<script.*?</sc替换为''。 - Oleksandr IY
3个回答

3

在JavaScript中,.*不能在跨越多行的情况下匹配。相反,请使用[\s\S]*。

以下是正则表达式:

/<script[\s\S]*?</script>/i

0
为了跨多行匹配模式,可以使用字符集 [^](当然,如果你不是指旧版本的 IE),它将匹配包括换行符在内的任何字符。
这意味着您应该使用负空选择 [^] 而不是点 . 来匹配“所有字符”。

0

这就是你要找的内容:

var html = "<html><head><script src='http://jquery.js'></script>\n<script src='http://jquery.js'></script></head><body>I m legend</body></html>";
html.replace(/<script.*?<\/script>/gi,'');

这将返回:

"<html><head>
</head><body>I m legend</body></html>"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接