【问题标题】:How to get the first five values once using a regular expression in JavaScript?如何在 JavaScript 中使用正则表达式获取前五个值?
【发布时间】:2019-09-19 23:28:23
【问题描述】:

我正在尝试从我的对象返回前五个检查点值。我首先,获取包含检查点的所有键,针对正则表达式进行测试。我得到了错误的值,我知道它是因为正则表达式,但不知道如何修复它。似乎是到达 checkpoint5 然后跳到 checkpoint10

var data = {
  practicals: '0',
  checkpoint1: '1',
  checkpoint2: '1',
  checkpoint3: '1',
  checkpoint4: '0',
  checkpoint5: '0',
  checkpoint6: '0',
  checkpoint7: '0',
  checkpoint8: '0',
  checkpoint9: '0',
  checkpoint10: '1',
  checkpoint11: '0',
  checkpoint12: '0',
  total: '2' 
}

var res = Object.keys(data)
  .filter(value => /^checkpoint([1-5])\d*/i.test(value))
  .map(e => data[e])

console.log(res)

// Current output: ["1", "1", "1", "0", "0", "1", "0", "0"]

// Expected output: ["1", "1", "1", "0", "0"]

【问题讨论】:

  • 属性名称不一定有顺序,您的正则表达式也匹配 checkpoint10checkpoint11checkpoint12。看看Object.keys(data)就知道了。
  • 当检查点 1 到 5 分别为 ["1", "0", "0", "0", "0"] 时,为什么您的预期输出为 ["1", "1", "1", "0", "0"]
  • @Nikhil 抱歉,我刚刚编辑了它
  • @jfriend00 对不起,我不明白你的意思
  • 你需要/^checkpoint[1-5]$/i

标签: javascript arrays node.js regex


【解决方案1】:

简单的调整即可解决。

var data = {
  practicals: '0',
  checkpoint1: '1',
  checkpoint2: '1',
  checkpoint3: '1',
  checkpoint4: '0',
  checkpoint5: '0',
  checkpoint6: '0',
  checkpoint7: '0',
  checkpoint8: '0',
  checkpoint9: '0',
  checkpoint10: '1',
  checkpoint11: '0',
  checkpoint12: '0',
  total: '2' 
}

var res = Object.keys(data)
  .filter(value => /^checkpoint([1-5])$/i.test(value))
  .map(e => data[e])

console.log(res)

【讨论】:

    【解决方案2】:

    试试/^checkpoint([1-5])$/i\d* 导致匹配任何大于 9 的检查点,您不需要它。

    【讨论】:

      猜你喜欢
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-29
      • 2020-11-24
      • 1970-01-01
      • 2018-11-27
      相关资源
      最近更新 更多