在字符串末尾实现通配符

Implementing wildcard at end of a string

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

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

我正在尝试 return 包含 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/)。我怎样才能收到以下 return:

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

您可以使用 Array.prototype.filter() method to filter array and RegExp.prototype.test() 来检查匹配。

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));


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

使用与之前相同的方法。然而使用“.filter”并不是一个坏主意,但我建议你比较他们的基准

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"]

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

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

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>");

或者,如果您仍然希望使用数组方法获得更快的解决方案,那么

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>");