RegEx - Value inside double square brackets
我试图从双方括号中提取一个值:
注意:这个regex将在javascript中使用,据我所知,它不支持查找后面的内容。
例如,取这3个字符串
1 2 3 | [[32]] [Test] Lorem Ipsum [[16]] Lorem Ipsum [[2]] Test [BUG] |
我想摘录:32,16,2
这是我试过的
试验1:
http://www.regexr.com/39sm3
只返回包含内方括号的值,例如[32]、[16]、[2]。然后我可以对结果执行另一个regex,但我想知道如何执行一次。
试验2:
http://www.regexr.com/39sm0
将返回带双方括号的值,例如,[[32]、[[16]、[[2]]
鉴于:
1 | var s = '[[32]] [Test] Lorem Ipsum [[16]] Lorem Ipsum [[2]] Test [BUG]'; |
您可以使用与一个或多个数字后跟"]]"匹配的向前看,但不包括匹配中的"]]":
1 | s.match(/\d+(?=\]\])/g) // ["32","16","2"] |
或者,如果没有lookahead,您可以使用:
1 | s.match(/\[\[(\d+)\]\]/g).map(function(v){return v.replace(/\[+|\]+/g,'');}) |
不过,如果地图可用,那么也可能是前瞻性的。如果输入是多行的,您可能还需要m标志。
可以使用捕获组来匹配模式中的子字符串。
在javascript中(括号在此处定义捕获组):
1 2 3 4 5 6 7 8 9 | var pattern = /\[\[([0-9]+)\]\]/g; var string ="[[1]] [2] [[3]] [4] [[five]]"; var numbers = []; while (match = pattern.exec(string)) { numbers.push(match[1]); //Get capturing group 1. This would be e.g."1" // NOTE: match[0] contains the entire match. e.g."[[1]]" } console.log(numbers) |
控制台输出:
有关捕获组的详细信息,请参阅http://www.regular-expressions.info/refcapture.html。
怎么样
1 | \[{2}(\d+)\]{2} |
告诉regex你想要
你试过
1 2 | var exp = /\[\[([0-9]+)\]\]/; var number = exp.exec("[[293]] Test line")[1] |
使用纯regex的另一种方法是使用lookarounds。
1 | (?<=\[\[)[0-9]+(?=\]\]) |