簡體   English   中英

正則表達式匹配<script type=“text/javascript”> but not <script type=“text/html”>

[英]regular expression to match <script type=“text/javascript”> but not <script type=“text/html”>

當前代碼(不起作用):

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

正則表達式和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');

假設您在使用正則表達式處理HTML時已了解所有假設。

您只需刪除當前代碼中的^ ,因為它與字符串的開頭匹配。

編輯

空格數應至少為1,因此您應將\\s之后的*更改為+

我不是正則表達式的忠實擁護者,所以我會這樣做:

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

要說明出現在腳本標記內任何地方的“類型”以及多種引號,請使用:

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

您可以通過指定所有引號代替“。”來加強它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM