考虑以下几点:JavaScript正则表达式匹配
var params = location.search.match(/=([\w\d-]+)&?/g);
console.log(params);
输出是:
["=7&", "=31500&", "=1"]
我不惯于任何迹象出现,只有数字或单词,所以我给自己定的括号,但它不起作用。那我该怎么做呢?
考虑以下几点:JavaScript正则表达式匹配
var params = location.search.match(/=([\w\d-]+)&?/g);
console.log(params);
输出是:
["=7&", "=31500&", "=1"]
我不惯于任何迹象出现,只有数字或单词,所以我给自己定的括号,但它不起作用。那我该怎么做呢?
你是否得到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>
+1:不是所有可以用regexen完成的事情都必须用regexen完成。 – Residuum 2011-05-25 08:25:20
@Residuum:在这种情况下,使用正则表达式很容易。 – 2011-05-25 08:31:43
有一个称为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'。
.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。
您是否也可以提供您正在使用的输入? – 2011-05-25 08:01:02
@Russ:我会说这是沿着“?foo = 7&bar = 31500&baz = 1”的行。这并不难推断.. ;-) – 2011-05-25 08:37:49