RegEx-双方括号内的值

RegEx - Value inside double square brackets

本文关键字:方括号 RegEx-      更新时间:2023-09-26

我试图提取一个位于双方括号内的值:[[x]],同时忽略位于单方括号中的所有其他值:[y]

注意: 此RegEx将在JavaScript中使用,据我所知,JavaScript不支持Looking behind

例如,以这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]]

给定:

var s = '[[32]] [Test] Lorem Ipsum [[16]] Lorem Ipsum [[2]] Test [BUG]';

您可以使用匹配一个或多个后跟"]]"的数字,但不包括匹配中的"]]":

s.match(/'d+(?=']'])/g)  // ["32", "16", "2"]

或者,如果前瞻性不可用,您可以使用:

s.match(/'['[('d+)']']/g).map(function(v){return v.replace(/'[+|']+/g,'');})

不过,如果地图可用,那么展望未来也可能可用。如果输入是多行,您可能还需要m标志。

您可以使用捕获组来匹配模式中的子字符串。

在JavaScript中(括号中定义了捕获组):

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获取有关捕获组的更多信息。

怎么样

'[{2}('d+)']{2}

告诉Regex您想要{2} [,然后是一些'd数字,然后是另一个{2} ]

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

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

number应返回'293'

let str = 'test [[1]], test [[2]], xyz, abc, &nbsp; <p>Hi</p> test [[3]].'
let result = str.match(/'['[('d+)']']/g).map((item) => {
    return parseInt(item.replace(/['[']]/g, ''))
})
console.log(result)

使用纯正则表达式的另一种方法是使用查找。

(?<='['[)[0-9]+(?=']'])