正则表达式匹配<script type =“text / javascript”>但不是<script type =“text / html”> </script>

时间:2012-06-18 01:05:48

标签: javascript regex

当前代码(不工作):

/^script\s*type=\"text\/javascript/i.test(tagName)

5 个答案:

答案 0 :(得分:2)

/<script\stype\=\"text\/javascript\">/i

答案 1 :(得分:2)

正则表达式和HTML - 糟糕的事情。正则表达式如何适用于下一个例子(不要忘记单引号和双引号)?

<script type="text/javascript"> 
<script language="JavaScript" type="text/javascript"> 
<script type="text/javascript" language="JavaScript"> 
<script class="myJS" type="text/javascript"> 
<script type="text/javascript" class="myJS" > 

我建议使用这样的函数代替正则表达式:

function attr_in_str(str, tag, attr) {
    var div = document.createElement('div');
    div.innerHTML = str;

    var elems = div.getElementsByTagName(tag);
    for (var i = 0; i < elems.length; i++) {
        if (elems[i].type.toLowerCase() == attr.toLowerCase()) {
            return true;
        }
    }
    return false;
}

然后使用它:

var str = 'This is my HTML <script type="text/javascript"></script>';
var result = attr_in_str(str, 'script', 'text/javascript');

答案 2 :(得分:1)

假设您在使用正则表达式处理HTML时了解所有假设。

您可以删除当前代码中的^,因为它与字符串的开头匹配。

修改

空格数量应至少为1,因此您应该在*之后将\s更改为+

答案 3 :(得分:1)

我不是正则表达式的忠实粉丝,所以我会这样做:

var temp = document.createElement('div');
temp.innerHTML = '<script type="text/html"></script>';

var type = temp.childNodes[0].getAttribute('type');

if (type == 'text/javascript') {
  // ...
}

如果您使用的是jQuery,那么方式会更容易:

if ($('<script type="text/html"></script>').prop('type') == 'text/javascript') {
  // ...
}

答案 4 :(得分:0)

要考虑脚本标记中任何位置出现的“类型”以及引号的多个版本,请使用:

/<script.*?type\s*=\s*.text\/javascript./i

您可以通过指定所有引号替代而不是'。'来收紧它。