Javascript RegEx-双方括号内的值
我试图在双方括号内提取一个值:Javascript RegEx-双方括号内的值,javascript,regex,Javascript,Regex,我试图在双方括号内提取一个值:[[x]],同时忽略单方括号内的所有其他值:[y] 注意:这个正则表达式将在JavaScript中使用,据我所知,JavaScript不支持向后查看 例如,以这3个字符串为例 [[32]] [Test] Lorem Ipsum [[16]] Lorem Ipsum [[2]] Test [BUG] 我想提取:32,16,2 这就是我尝试过的 测试1: \[([0-9]+)\] 将仅返回包含内方括号的值,例如[32]、[16]、[2]。我可以在结果上再做一次正则表
[[x]]
,同时忽略单方括号内的所有其他值:[y]
注意:这个正则表达式将在JavaScript中使用,据我所知,JavaScript不支持向后查看
例如,以这3个字符串为例
[[32]] [Test] Lorem Ipsum
[[16]] Lorem Ipsum
[[2]] Test [BUG]
我想提取:32,16,2
这就是我尝试过的
测试1:
\[([0-9]+)\]
将仅返回包含内方括号的值,例如[32]、[16]、[2]。我可以在结果上再做一次正则表达式,但我想知道怎么做一次
测试2:
\[.*?\]
将返回带有双方括号的值,例如,[[32]]、[[16]]、[[2]]您是否尝试过/\[\[([0-9]+)\]\]/
?当然,假设您只希望数字在双方括号内
var exp = /\[\[([0-9]+)\]\]/;
var number = exp.exec("[[293]] Test line")[1]
number
应该返回'293'
怎么样
\[{2}(\d+)\]{2}
告诉Regex您想要{2}
[
然后是一些\d
数字,然后是另一个{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中(括号定义了捕获组):
控制台输出:[“1”、“3”]
有关捕获组的更多信息,请参阅。使用纯正则表达式的另一种方法是使用lookarounds
(?<=\[\[)[0-9]+(?=\]\])
(?let str='test[[1]],test[[2]],xyz,abc,Hitest[[3].'
让结果=str.match(/\[\[(\d+)\]\]\]/g)。映射((项)=>{
返回parseInt(item.replace(/[\[\]]/g,'))
})
console.log(结果)
返回[“[[32]]”、“[[16]]”、“[[2]]”]
,而不是OP想要的(如文章中所述)。不过,捕获组应该有正确的值。让我仔细检查一下。谢谢@nhahdh,我太粗心了。谢谢!这正是我想要的。但是这不会匹配像foo123]
,没有前导双方括号的模式吗?@torazaburo正在做一些测试,是的,但在我的例子中,我只是包装了一个if
con另外,要测试字符串的索引是否为[[
和]]
。因为这是针对JavaScript的,所以我不能使用Lookbehind。感谢您的回复。这看起来很棒,但是我需要在JavaScript中使用它,很遗憾,它不支持Lookbehind。我将更新这个问题,因为可能仅从标记来看这一点并不明显。啊,我的错误,对不起。这确实让问题变得更难解决,尽管看起来您已经解决了收到了合适的答案。感谢您的回复。欢迎访问SO!请解释您的答案,请参阅
(?<=\[\[)[0-9]+(?=\]\])
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)