考慮以下幾點: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