正则表达式提取 [squarebrackets] 内的内容,但不提取 [[wiki-links]] 内的内容
Regex to extract the content inside [squarebrackets] but not [[wiki-links]]
我正在寻找可以匹配和提取 [squarebrackets]
内但不在 [[wiki-links]]
内的内容的正则表达式。因此,对于上面的示例,我将仅提取 squarebrackets
部分,而不提取 [squarebrackets]
、[wiki-links]
或 wiki-links
.
目前,我找到了两个正则表达式:
- 仅提取 [[wiki-links]] 中的内容(而不是 [squarebrackets]):
/[^[\]]+(?=]])/g
- 提取 [[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);
我正在寻找可以匹配和提取 [squarebrackets]
内但不在 [[wiki-links]]
内的内容的正则表达式。因此,对于上面的示例,我将仅提取 squarebrackets
部分,而不提取 [squarebrackets]
、[wiki-links]
或 wiki-links
.
目前,我找到了两个正则表达式:
- 仅提取 [[wiki-links]] 中的内容(而不是 [squarebrackets]):
/[^[\]]+(?=]])/g
- 提取 [[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);