使用reduce检查数组是否包含与字符串匹配的正则表达式

时间:2015-11-17 07:40:07

标签: javascript regex reduce

我在JavaScript中有一个正则表达式列表,如下所示:

var list = [
 '^/items/detail.*',
 '^/items/settings.*',
 '^/article/view/.*',
 '^/home/purchase.*',
];

我想查看一个字符串是否匹配数组中的一个正则表达式。 如果可能的话,我想使用reduce。

我试过这个:

var text = "http://www.mypage.com/items/detail";
var result = list.reduce((a, b) =>
  !!text.match(a) || !!text.match(b)
);

但似乎不起作用。由于某种原因,它返回false。我尝试过不同的变化,但找不到合适的变体。

1 个答案:

答案 0 :(得分:5)

您需要使用 RegExp() 并添加其他条件a === true,因为a在第二次迭代时将为true或false



var list = [
  '/items/detail.*',
  '^/items/settings.*',
  '^/article/view/.*',
  '^/home/purchase.*',
];

var text = "http://www.mypage.com/items/detail";
var result = list.reduce((a, b) =>
  a === true || (a !== false && !!text.match(RegExp(a))) || !!text.match(RegExp(b))
);

console.log(result)




<小时/> 的更新:

@zerkms 建议的更简化版本,提供额外的 initialValue 作为false

&#13;
&#13;
var list = [
  '/items/detail.*',
  '^/items/settings.*',
  '^/article/view/.*',
  '^/home/purchase.*',
];

var text = "http://www.mypage.com/items/detail";
var result = list.reduce((a, b) => a || RegExp(b).test(text), false)

console.log(result)
&#13;
&#13;
&#13;