【问题标题】:Nodejs : RegExp returns nothingNodejs:正则表达式不返回任何内容
【发布时间】:2019-08-26 18:52:14
【问题描述】:

我正在尝试从 Emotiv 输出中提取电极的名称及其值。但是下面的代码什么也不返回。

我是 nodejs 的新手。我尝试使用正则表达式在单行上执行此操作,但它太复杂了,我无法正确处理。我已经成功地抓住了整条线,但没有抓住价值。

这是我的代码:

var str = '"levels":{"F3":7094,"FC6":8209,"P7":12165,"T8":5380,"F7":1356,"F8":2043,"T7":11882,"P8":10117,"AF4":13257,"F4":6134,"AF3":13527,"O2":9686,"O1":871,"FC5":1808},"' ; 
    const reg = new RegExp('.{2}\w\"\:\d{3,5}/g'); 
    var test = str.match(reg) ; 
    if (test)   
       console.log(test[1]) ;

我希望 14 个电极的输出为 F3 : 8209 等等。

【问题讨论】:

  • 问题与machine-learning 无关 - 请不要向标签发送垃圾邮件(已删除)。
  • 你能解释一下逻辑,不是吗:FC6 : 8209?这看起来几乎像 JSON,所以您可能想要使用 JSON.parse 而不是正则表达式。
  • 他甚至不需要 JSON.parse()。只需用花括号替换单引号,您就得到了一个对象。 var data = {"levels":{"F3":7094,"FC6":8209,"P7":12165,"T8":5380,"F7":1356,"F8":2043,"T7":11882,"P8":10117,"AF4":13257,"F4":6134,"AF3":13527,"O2":9686,"O1":871,"FC5":1808}"}
  • 这是我的错,我复制了错误的值,我的意思是 F3:7094。我刚开始使用 nodejs,所以我有点困惑。 1真正的工作是从我的 Emotiv 输出中提取值并将它们存储在数据库中。我被困在从输出中抓取它们。

标签: javascript node.js regex parsing


【解决方案1】:

我知道这并不能完全回答 RegExp 问题,但这种重写应该会让你工作得更快。

const text = '"levels":{"F3":7094,"FC6":8209,"P7":12165,"T8":5380,"F7":1356,"F8":2043,"T7":11882,"P8":10117,"AF4":13257,"F4":6134,"AF3":13527,"O2":9686,"O1":871,"FC5":1808},"';

let json = "{" + text.substring(0, text.length - 2) + "}"
let obj = JSON.parse(json)

for (const [key, value] of Object.entries(obj.levels)) {
  console.log(`${key} ${value}`); 
}

我还想出了一个新的正则表达式,我认为它会给你你想要的。

const text = '"levels":{"F3":7094,"FC6":8209,"P7":12165,"T8":5380,"F7":1356,"F8":2043,"T7":11882,"P8":10117,"AF4":13257,"F4":6134,"AF3":13527,"O2":9686,"O1":871,"FC5":1808},"';

let regexp = /\"([^\"]{2,3})\"\:(\d{3,5})/g
let r = null
do {
    r = regexp.exec(text)
    if (r) console.log(`${r[1]} ${r[2]}`); 
} while (r)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    相关资源
    最近更新 更多