2011-05-25 112 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。