我有一个json数组:
var arr =
[
{
"path": "a/b/c/*",
"id": "1"
},
{
"path": "l/m/*/n",
"id": "2"
},
{
"path": "a/b/c/d/*",
"id": "3"
}
]
我想要与输入参数匹配的元素的id, 就像我传递一个输入字符串和数组我应该得到id
foo(input,arr);
所以
var input = 'a/b/c/5'; //or input = 'a/b/c/4';
foo(input,arr) // should return 1
同样
var input = 'l/m/78/n';
foo(input,arr); // should return 2
同样
var input = 'a/b/c/d/1';
foo(input,arr); // should return 3
所以我希望*在搜索时成为通配符。 我在实施这个过程中遇到了很多困难,我们将不胜感激。
答案 0 :(得分:3)
将每个path
转换为regular expression,注意通配符的正则表达式为.*
而不是*
。
根据您更新的问题,并假设通配符应仅匹配数字,正则表达式变为[0-9]+
:
var arr = [{"path": "a/b/c/*","id": "1"},
{"path": "l/m/*/n","id": "2"},
{"path": "a/b/c/d/*","id": "3"}
];
function foo(input, arr) {
var i, RE;
for(i = 0 ; i < arr.length ; i++) { //iterate through the array
RE = new RegExp(arr[i].path.replace(/\*/g, '[0-9]+')); //convert path to regexp
if(RE.test(input)) { //test for a match
return arr[i].id;
}
}
}
console.log(foo('a/b/c/5', arr));
console.log(foo('l/m/78/n', arr));
console.log(foo('a/b/c/d/1', arr));
&#13;
答案 1 :(得分:1)
function foo(input,arr){
for(var i in arr){
var re = new RegExp(arr[i].path.replace(/\*/g, '.*'));
if (re.test(input)) {
return arr[i].id;
}
}
return null;
}
var arr =
[
{
"path": "a/b/c/*",
"id": "1"
},
{
"path": "l/m/*/n",
"id": "2"
}
];
document.write(foo("l/m/1/n",arr));
&#13;
答案 2 :(得分:1)
这是一个正则表达式免费版本:
var arr = [{
'path' : 'a/b/c/*',
'id' : '1'
}, {
'path' : 'l/m/*/n',
'id' : '2'
}
]
function search(arr, input) {
input = input.split('/');
return arr.filter(function (el) {
var value = el.path.replace('*', '').split('/');
var passed = true;
for (var i = 0; i < value.length; i++) {
if (input[i].length < 1 || value[i].length < 1 || input[i] == value[i]) {}
else {
passed = false;
}
}
return passed;
})
}
console.log(search(arr, 'a/b/c/5'));
console.log(search(arr, 'l/m/78/n'));
&#13;