如何匹配文本“flt_man”之后和“,”之前的每个变量在以下哈希字符串中?
#flt_man100,flt_man234,flt_man334,flt_manABC,
我尝试了这个,但它不起作用。
var check = location.hash.match(/flt_man([^,]*)/g);
我需要匹配才能返回值为100,234,334,“ABC”
的数组答案 0 :(得分:2)
这个怎么样?
var str = "#flt_man100,flt_man234,flt_man334,flt_manABC,";
var regex = /flt_man([^,]*)/g;
var arr = new Array();
var result;
while(result = regex.exec(str)){
arr.push(result[1]); //can check if numeric
}
console.log(arr); //arr contains what you need
要检查数字是否可以使用this method,并在之后立即致电parseInt()
。
答案 1 :(得分:1)
更便宜的替代方案(这里并不重要)
var str = "#flt_man100,flt_man234,flt_man334,flt_manABC,";
var arr = str.replace(/[#]?flt_man/g,'').splitCast(',');
arr.pop();
这使用了一些我认为足以抽象的函数
String.prototype.splitCast = function(S){
var arr = this.split(S);
for(var i=0, l=arr.length; i<l; i++){
var value= arr[i];
arr[i] = !isNaN(parseInt(value,10)) && (parseFloat(value,10) == parseInt(value,10)) ? parseInt(value) : value;
}
return arr;
}
答案 2 :(得分:0)
// [100, 234, 334, "ABC"]
console.log(location.hash.substr(1) // Get rid of the '#'
.split(',')
.filter(function (param) { // Find the parameters
return /^flt_man/.test(param);
})
.map(function (param) { // Get rid of the prefix
return param.substr('flt_man'.length);
})
.map(function (param) { // Optionally cast them to numbers
return +param || param;
}));