正则表达式仅在给定条件下获取大括号之间的所有内容(包括大括号)

Regex to get everything between and including curly braces only if a given condition

你好,我正在尝试创建一个正则表达式,它将获取 之间的所有内容,包括 花括号 only 如果大括号之间的字符串 # 开始 并且如果后面有一个 \n 大括号}

我以下面的字符串为例 -

## Markdown Syntax {#markdown-syntax}\n\n (lorem ipsum test).\n\n## Headers {#headers}\n\n function HelloCodeTitle(props) {return <h1>Hello, {props.name}</h1>; } {2}

在这个例子中,我希望从上面的字符串中提取 {#markdown-syntax}{#headers} 并将它们替换为空的 space ''

我已经写了 this regex 但这也抢了 {return <h1>Hello, {props.name}{2} 我不想要的。我只想抓住 {#markdown-syntax}{#headers} (包括大括号)作为大括号 starts# 之间的字符串和\n 花括号 }

之后

使用 match() 和适当的模式:

var input = "## Markdown Syntax {#markdown-syntax}\n\n (lorem ipsum test).\n\n## Headers {#headers}\n\n function HelloCodeTitle(props) {return <h1>Hello, {props.name}</h1>; } {2}";
var tags = input.match(/\{#.*?\}(?=\n)/g, input);
console.log(tags);

上面使用的正则表达式模式表示:

\{      match opening {
#       match #
.*?     match all content up the first
\}      closing }
(?=\n)  assert that what follows is a newline character

如果您想删除这些标签,请使用replace相同的模式:

var input = "## Markdown Syntax {#markdown-syntax}\n\n (lorem ipsum test).\n\n## Headers {#headers}\n\n function HelloCodeTitle(props) {return <h1>Hello, {props.name}</h1>; } {2}";
var output = input.replace(/\s*\{#.*?\}(?=\n)/g, " ").trim();
console.log(output);