[英]JavaScript regular expression match
考虑以下:
var params = location.search.match(/=([\w\d-]+)&?/g);
console.log(params);
output 是:
["=7&", "=31500&", "=1"]
我不会有任何符号,只有数字或单词,所以我设置了括号,但它不起作用。 那么我该怎么做呢?
你得到查询字符串参数了吗? 我认为这就是您想要的(尽管它不使用正则表达式)。
<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>
有一个很好的 javascript function 叫做gup() ,它使这种事情变得简单。 这是 function:
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
标志用于正则表达式。 每次在param
正则表达式上调用.exec
时,它的lastIndex
属性都会设置为下一个匹配的 ZE83AED3DDF4667DEC0DAAAACB2BB3BE0BZ ,这反过来又确保对.exec
的下一次调用在下一个匹配时开始搜索。 结果数组包含索引 0 处的整个匹配字符串,然后是后续位置的每个匹配组。 因此,您的组作为数组的索引 1 返回。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.