2012-06-18 50 views

回答

0

爲了說明內的任何地方出現的「類型」腳本標記和多個版本的引號,使用:

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

您可以通過指定所有報價選項而不是'。'來加強它。

1

假設你知道所有的當您使用正則表達式來處理HTML時的假設。

您可以刪除當前代碼中的^,因爲它與字符串的開頭匹配。

編輯

的空間數量至少應爲1,所以你應該改變\s*+

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

我不是正則表達式的大風扇,所以我d這樣做:

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') { 
    // ... 
} 
+0

是否有一個瀏覽器可以實際執行JavaScript?如果是這樣,這種方法可能會帶來一點安全風險。 – Ryan

+0

肯定比正則表達式更好! –

+1

@minitech:元素沒有被追加到文檔本身,所以我懷疑瀏覽器可以執行它。 – Blender

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'); 
相關問題