我正在尝试在Double Square括号中提取一个值:[[x]]
,而忽略单个方括号中的所有其他值:[y]
。
注意: 此RegEx将在JavaScript中使用,据我所知,不支持后面的
例如,取这3个字符串
[[32]] [Test] Lorem Ipsum
[[16]] Lorem Ipsum
[[2]] Test [BUG]
我想提取: 32,16,2
这就是我试过的
测试1:
\[([0-9]+)\]
仅返回包含内部方括号的值,例如 [32],[16],[2] 。然后我可以在结果上再做一次RegEx,但我想知道如何做一次。
测试2:
\[.*?\]]
将使用双方括号返回值,例如 [[32]],[[16]],[[2]]
答案 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, <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]+(?=\]\])