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

use*_*755 3 javascript regex reduce

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

var list = [
 '^/items/detail.*',
 '^/items/settings.*',
 '^/article/view/.*',
 '^/home/purchase.*',
];
Run Code Online (Sandbox Code Playgroud)

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

我已经试过了:

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

但似乎不起作用。由于某种原因,它返回false。我尝试了各种变体,但找不到可行的变体。

Pra*_*lan 6

您需要使用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)
Run Code Online (Sandbox Code Playgroud)


更新:

@zerkms建议的更简化的版本,通过提供额外initialValuefalse

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)
Run Code Online (Sandbox Code Playgroud)

  • `list.reduce((a,b)=> a || RegExp(b).test(text),false)` (4认同)
  • 感谢更新!这是我发现的另一种方式(但没有减少:()`list.filter((a) => path.match(a)).length > 0` (2认同)