繁体   English   中英

RegEx - 双方括号内的值

[英]RegEx - Value inside double square brackets

我试图在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]]

鉴于:

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

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

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

number应返回'293'

怎么样

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

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

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]+(?=\]\])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM