正则表达式提取 [squarebrackets] 内的内容,但不提取 [[wiki-links]] 内的内容

Regex to extract the content inside [squarebrackets] but not [[wiki-links]]

我正在寻找可以匹配和提取 [squarebrackets] 内但不在 [[wiki-links]] 内的内容的正则表达式。因此,对于上面的示例,我将仅提取 squarebrackets 部分,而不提取 [squarebrackets][wiki-links]wiki-links.

目前,我找到了两个正则表达式:

  1. 仅提取 [[wiki-links]] 中的内容(而不是 [squarebrackets]):
/[^[\]]+(?=]])/g
  1. 提取 [[wiki-links]] 和 [squarebrackets] 中的内容:
\[[^\[\]]+\]/g

第二个接近我想要的,但它仍然包含方括号本身并捕获我不想要的 [[wiki-links]] 内容。

我如何通过修改正则表达式来排除这些内容,以便我只获得单个方括号内的内容,而没有括号本身?

谢谢!

您可以使用

/(?<!\[)\[([^[\]]+)](?!])/g

regex demo详情:

  • (?<!\[) - 与不紧跟 [ char
  • 的位置匹配的否定后视
  • \[ - 一个 [ 字符
  • ([^[\]]+) - 第 1 组:[]
  • 以外的一个或多个字符
  • ] - 一个 ] 字符
  • (?!]) - 一个 ] 字符。

查看 JavaScript 演示:

const text = "I'm looking for a regex that could match and extract the content inside [squarebrackets] but not inside [[wiki-links]].";
const regex = /(?<!\[)\[([^[\]]+)](?!])/g;
const matches = Array.from(text.matchAll(regex), x => x[1]);
console.log(matches);

如果您将它与旧的 ECMAScript 正则表达式一起使用:

var text = "I'm looking for a regex that could match and extract the content inside [squarebrackets] but not inside [[wiki-links]].";
var regex = /(\[?)\[([^[\]]+)](?!])/g;
var matches = [], m;
while (m = regex.exec(text)) {
  if (m[1] !== undefined) {
    matches.push(m[2]);
  }
}
console.log(matches);