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

标签 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。我尝试了不同的变体,但找不到一个有效的变体。

最佳答案

您需要使用 RegExp() 并添加一个附加条件 a === true 因为 a 将在第二次迭代时为真或假

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

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)

关于javascript - 使用 reduce 检查数组是否包含与字符串匹配的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33751512/

相关文章:

用于表单验证的正则表达式 1-9999

java - 无法使用 REGEX 解析 Java 中带点的字符串

Haskell 的 foldr/l 和 Clojure 的 reduce

arrays - 如何使用reduce(into :_:)?)将数组转换为二维数组

java - 文件 URL 的正则表达式

javascript - 如何在 javascript 中递归使用 reduce() 方法?

javascript - HTML单选按钮在数据库中保存第一个单选按钮值

java - 如何使用 webdriver 增加 HTML 表格列宽

javascript - Div 元素充当背景

javascript - 计算 safari 和 chrome 中 svg 路径的 getBBox() 中包含的控制点