RegEx - 双方括号内的值

时间:2014-11-11 03:13:49

标签: javascript regex

我正在尝试在Double Square括号中提取一个值:[[x]],而忽略单个方括号中的所有其他值:[y]

注意: 此RegEx将在JavaScript中使用,据我所知,不支持后面的

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

6 个答案:

答案 0 :(得分: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,'');})

虽然如果 map 可用,那么可能也是前瞻性的。如果输入是多行的,您可能还需要 m 标志。

答案 1 :(得分:1)

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

在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 :(得分:0)

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

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

number应该返回'293'

答案 3 :(得分:0)

怎么样

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

告诉正则表达式你需要{2} [然后是一些\d个数字,然后是另一个{2} ]

答案 4 :(得分:0)

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)

答案 5 :(得分:-1)

使用纯正则表达式执行此操作的另一种方法是使用外观。

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