节点uri regex未捕获捕获组

时间:2019-05-01 02:13:35

标签: node.js regex

我知道stackoverflow上有十亿个正则表达式问题,但是我不明白为什么我的uri匹配器不能在node中工作。

我有以下内容:

var uri = "file:tmp.db?mode=ro"

function parseuri2db(uri){
    var regex = new RegExp("(?:file:)(.*)(?:\\?.*)");
    let dbname = uri.match(regex)
    return dbname
}

我正在尝试仅识别数据库名称,我希望它是:

  1. 在未捕获的file:组之后
  2. 在字符串末尾的可选? +参数之前。

我正在使用:

var regex1 = new RegExp("(?:file:)(.*)(?:\\?.*)");

我认为答案实际上更像是:

var regex2 = new RegExp("(?:file:)(.*)(?:\\??.*)");

?文字上使用0或1 \\?量词。但是后者失败了。

无论如何,我的结果是:

console.log(parseuri2db(conf.db_in.filename))

[ 'file:tmp.db?mode=ro',
  'tmp.db',
  index: 0,
  input: 'file:tmp.db?mode=ro' ]

这似乎是在第一个参数中捕获整个字符串,而不仅仅是我要求的单个捕获组。

我的问题是:

  1. 要获取多个照片,我在做什么错了?
  2. 如何重新命名以捕获具有名称的捕获组?

I expected适用于(2),如下所示:

function parseuri2db(uri){
  // var regex = new RegExp("(?:file:)(.*)(?:\\?.*)");
  // let dbname = uri.match(regex)
  var regex = new RegExp("(?<protocol>file:)(?<fname>.*)(<params>\\?.*)");
  let [, protocol, fname, params] = uri.match(regex)
  return dbname
  }
  console.log(parseuri2db(conf.db_in.filename))

但是:

  SyntaxError: Invalid regular expression: /(?<protocol>file:)(?<fname>.*)(<params>\?.*)/: Invalid group

更新1

第一个问题的答案是,我不需要在第二个捕获组中捕获?文字:

"(?:file:)([^?]*)(?:\\??.*)"

1 个答案:

答案 0 :(得分:0)

该特定的节点正则表达式库不支持组。