Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript RegEx-双方括号内的值_Javascript_Regex - Fatal编程技术网

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,Hi

test[[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, &nbsp; <p>Hi</p> test [[3]].'

let result = str.match(/\[\[(\d+)\]\]/g).map((item) => {
    return parseInt(item.replace(/[\[\]]/g, ''))
})

console.log(result)