我知道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
}
我正在尝试仅识别数据库名称,我希望它是:
file:
组之后?
+参数之前。 我正在使用:
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' ]
这似乎是在第一个参数中捕获整个字符串,而不仅仅是我要求的单个捕获组。
我的问题是:
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
第一个问题的答案是,我不需要在第二个捕获组中捕获?
文字:
"(?:file:)([^?]*)(?:\\??.*)"
答案 0 :(得分:0)
该特定的节点正则表达式库不支持组。