在字符串末尾实现通配符

时间:2016-05-19 08:39:09

标签: javascript arrays wildcard

我浏览了很多帖子(和其他网站),我似乎遇到了障碍。我有以下数组:

var data_dictionary = ["youtube.com", "facebook.com", "youtube.com/feed/subscriptions", "twitter.com"]

我正在尝试为youtube.com *的所有内容返回数据。以下是我的功能的相关片段:

var result = []     
for (var i=0; i<data_dictionary.length; i++) {
   if (data_dictionary[i].page == /^youtube.com/) {
     result.push (data_dictionary[i].page,data_dictionary[i].share)
    }
 }
 break;       
}
return result

问题区域在if子句中( / ^ youtube.com / )。我怎样才能收到以下回报:

["youtube.com" , "youtube.com/feed/subscriptions"]

3 个答案:

答案 0 :(得分:3)

您可以使用 Array.prototype.filter() 方法过滤数组,使用 RegExp.prototype.test() 检查匹配。

&#13;
&#13;
var data_dictionary = ["youtube.com", "facebook.com", "youtube.com/feed/subscriptions", "twitter.com"];

function check(data_dictionary) {
  return data_dictionary.filter(function(v) {
    return /^youtube\.com/.test(v);
    // using indexOf
    // v.indexOf('youtube.com') == 0;
  });
}
console.log(check(data_dictionary));
&#13;
&#13;
&#13;

仅供参考:如果字符串为'/^youtube.com/',则if条件仅为true。即,('/^youtube.com/' == /^youtube.com/) === true。如果您将if条件更改为/^youtube.com/.test(data_dictionary[i]),则代码将起作用。同样在提供的数据中pageshare属性未定义,只有普通字符串才是元素。

答案 1 :(得分:0)

使用您之前使用的相同方法。但是使用&#34; .filter&#34;不会是一个坏主意,但我会建议你比较他们的基准

var data_dictionary = ["youtube.com", "facebook.com", "youtube.com/feed/subscriptions", "twitter.com"];
var pattern = /^youtube.com/;
var result = [];
var i = 0;

function loop (args) {
  for (i; i < args.length; i++) {
    if (pattern.test(args[i])) {
        result.push(args[i]);
    }
  }
 return result;
}

console.log(loop(data_dictionary)) // ["youtube.com" , "youtube.com/feed/subscriptions"]

比较下面的速度我建议你使用上面的方法

enter image description here

答案 2 :(得分:0)

这里不需要正则表达式,你可以这样做;

&#13;
&#13;
var data_dictionary = ["youtube.com", "facebook.com", "youtube.com/feed/subscriptions", "twitter.com"],
filtered = data_dictionary.filter(e => !!~e.indexOf("youtube.com") && e);
document.write("<pre>" + JSON.stringify(filtered) + "</pre>");
&#13;
&#13;
&#13;

或者如果您想要使用Array方法更快的解决方案,那么

&#13;
&#13;
var data_dictionary = ["youtube.com", "facebook.com", "youtube.com/feed/subscriptions", "twitter.com"],
filtered = data_dictionary.reduce((p,c) => !!~c.indexOf("youtube.com") ? p.concat(c):p,[]);
document.write("<pre>" + JSON.stringify(filtered) + "</pre>");
&#13;
&#13;
&#13;