关于javascript:RegEx – 双方括号内的值

RegEx - Value inside double square brackets

我试图从双方括号中提取一个值:[[x]],而忽略单方括号中的其他值:[y]

注意:这个regex将在javascript中使用,据我所知,它不支持查找后面的内容。

例如,取这3个字符串

1
2
3
[[32]] [Test] Lorem Ipsum
[[16]] Lorem Ipsum
[[2]] Test [BUG]

我想摘录:32,16,2

这是我试过的

试验1:

\[([0-9]+)\]

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)

控制台输出:["1","3"]

有关捕获组的详细信息,请参阅http://www.regular-expressions.info/refcapture.html。


怎么样

1
\[{2}(\d+)\]{2}

告诉regex你想要{2}[,然后一些\d数字,然后另一个{2}]


你试过/\[\[([0-9]+)\]\]/吗?当然,假设您只期望双方括号内的数字。

1
2
var exp = /\[\[([0-9]+)\]\]/;
var number = exp.exec("[[293]] Test line")[1]

number应返回'293'


使用纯regex的另一种方法是使用lookarounds。

1
(?<=\[\[)[0-9]+(?=\]\])