2011-05-25 88 views
3

考慮以下幾點:JavaScript正則表達式匹配

var params = location.search.match(/=([\w\d-]+)&?/g); 
console.log(params); 

輸出是:

["=7&", "=31500&", "=1"] 

我不慣於任何跡象出現,只有數字或單詞,所以我給自己定的括號,但它不起作用。那我該怎麼做呢?

+1

您是否也可以提供您正在使用的輸入? – 2011-05-25 08:01:02

+0

@Russ:我會說這是沿着「?foo = 7&bar = 31500&baz = 1」的行。這並不難推斷.. ;-) – 2011-05-25 08:37:49

回答

3

你是否得到querystring參數?我認爲這是你想要的(儘管它不使用正則表達式)。

<script type="text/javascript"> 
<!-- 
function querySt(ji) { 
    hu = window.location.search.substring(1); 
    gy = hu.split("&"); 
    for (i=0;i<gy.length;i++) { 
     ft = gy[i].split("="); 
     if (ft[0] == ji) { 
      return ft[1]; 
     } 
    } 
} 

var koko = querySt("koko"); 

document.write(koko); 
document.write("<br>"); 
document.write(hu); 
--> 
</script> 

參考:http://ilovethecode.com/Javascript/Javascript-Tutorials-How_To-Easy/Get_Query_String_Using_Javascript.shtml

+0

+1:不是所有可以用regexen完成的事情都必須用regexen完成。 – Residuum 2011-05-25 08:25:20

+0

@Residuum:在這種情況下,使用正則表達式很容易。 – 2011-05-25 08:31:43

2

有一個稱爲gup()一個不錯的javascript函數,這使得這種簡單的事情。這裏的功能:

function gup(name) 
{ 
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]"); 
    var regexS = "[\\?&]"+name+"=([^&#]*)"; 
    var regex = new RegExp(regexS); 
    var results = regex.exec(window.location.href); 
    if(results == null) 
    return ""; 
    else 
    return results[1]; 
} 

和樣本用法:

var myVar = gup('myVar'); 

所以,如果你的查詢字符串看起來是這樣的:myVar的= ASDF

myVar的將返回 'ASDF'。

2

.match方法將返回整個匹配的字符串,而不是您使用圓括號定義的任何分組。

如果你想在正則表達式只返回一個分組,您就必須使用.exec方法多次,並且從結果數組中提取匹配的組:

var search = location.search, 
    param = /=([\w\d-]+)&?/g, 
    params = [], 
    match; 
while ((match = param.exec(search)) != null) { 
    params.push(match[1]); 
} 
console.log(params); 

這工作,因爲g標誌用於正則表達式。每當您撥打.exec,param正則表達式時,它的lastIndex屬性被設置爲下一個匹配的子字符串,並且反過來確保下一個.exec調用在下一次匹配時開始搜索。結果數組包含索引0處的整個匹配字符串,然後包含後續位置處的每個匹配組。您的組因此返回爲數組的索引1。