簡體   English   中英

使用正則表達式從JavaScript包含標簽中提取參數

[英]Extracting parameters from JavaScript include tag using a Regex

我目前正在嘗試從路徑解析參數到JavaScript文件(在script標記內部)。 目前,我知道我希望有哪些參數,但是我不想提取期望的參數,而是想提取所有給定的參數。

包含JavaScript文件的腳本標簽示例:

<script type="text/javascript" src="https://url/widget.js?param1=A&param2=bb></script>

目前,我只是這樣做(分別針對每個參數):

jQuery('script').each(function() {
    var script = this;
    if (!script.src) {
        return;
    }    
    var matchKey = script.match(/https\:\/\/url\/widget\.js\?param1=([A-Z]+)/);
    if (matchKey) {
        oSettings.param1 = matchKey[1];
    }
}

因此,我需要的是一個正則表達式,可以從所包含的sript中提取參數的名稱和值。

感謝您的協助!

此測試功能起作用:

function parse_query_vars(text)
{ // Extract name=value pairs from URL query string.
    // Empty object to store name, value pairs.
    var qvars = {},
    // Capture non-empty query string in $1.
        re_q = /\?([^#]+)/, // From '?' up to '#' or EOS.
    // Capture variable name in $1 and value in $2.
        re_nv = /([^=]+)=([^&]*)(?:&(amp;)?|$)/gi,
    // Match array for query string and va=val pairs.
        m =  text.match(re_q),
    // Query string plucked from URL
        q = '';
    // If there is a query string, copy to q var.
    if (m) q = m[1];
    while (m = re_nv.exec(q)) {
        qvars[m[1]] = m[2];
    }
    return qvars; // Return results in object
}

它首先從URL中提取任何查詢字符串,然后迭代解析出“名稱=值”對,然后將結果返回到一個對象中。 它處理由&&amp;分隔的名稱值對&amp; 如果網址在查詢后帶有#fragment則可以使用。

使用像這樣 ,還是這個 ,還是這個

它們並不是全部的正則表達式解決方案,但是您不一定需要正則表達式。 這是一個細節,可能不予考慮。

希望有所幫助。

(這實際上沒有經過測試)

var scripts = document.getElementsByTagName("script"), i = scripts.length;
var reMatch = /https\:\/\/url\/widget\.js/, path;
// find the correct script
do {
    path = scripts[i--].src;
}
while (!reMatch.test(path));

var map = {}, pairs = path.substring(path.indexOf("?") + 1).split("&"), atoms;
i = pairs.length;
// extract the name-value pairs
while (i--) {
    atoms = pairs[i].split("=");
    map[decodeURIComponent(atoms[0])] = decodeURIComponent(atoms[1]);
}

暫無
暫無

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

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