Javascript:正则表达式搜索并提取“{}”中的字符串

the*_*a93 2 javascript regex

这是我要搜索的字符串。

Make {The Most|One of the most} Out Of Your {Real Estate|Realty|Property} {Purchase|Acquisition} When You {Follow|Comply With|Adhere To} { something } These Tips
Run Code Online (Sandbox Code Playgroud)

它应该搜索并返回花括号中的字符串部分,{ }并且其中必须包含一个或多个管道|符号。

以下是我想出的正则表达式,但它不起作用。

/^{?([^{]*\|)*}$
Run Code Online (Sandbox Code Playgroud)

预期产出

[{The Most|One of the most}, {Real Estate|Realty|Property}, {Real Estate|Realty|Property}, {Purchase|Acquisition}, {Follow|Comply With|Adhere To}]
Run Code Online (Sandbox Code Playgroud)

请注意,它{ something }不应该是输出的一部分。提前致谢

The*_*ird 5

您可以使用 2 个否定字符类,确保至少匹配管道 1 次。

您可以将量词更改为+是否应该至少有一个字符(请注意,这也可以是一个空格)

{[^{}|]*\|[^{}]*}
Run Code Online (Sandbox Code Playgroud)

解释

  • { 比赛 {
  • [^{}|\n]*匹配 0+ 次任何字符,除了{ },|或换行符
  • \| 比赛 |
  • [^{}\n]*匹配 0+ 次除{or}或换行符以外的任何字符(也允许另一个|
  • } 比赛 }

正则表达式演示


如果必须有一个非空白字符等是| {}之前和之后管:

{[^\S\n]*[^\s{}|][^{}|]*\|[^\S\n]*[^\s{}|][^{}]*}
Run Code Online (Sandbox Code Playgroud)

解释

  • { 比赛开场 {
  • [^\S\n]* 匹配 0+ 个空白字符,换行符除外
  • [^\s{}|]匹配除{ }or以外的非空白字符|
  • [^{}|]*匹配 0+ 次除{ }or以外的任何字符|
  • \| 比赛 |
  • [^\S\n]* 匹配 0+ 个空白字符,换行符除外
  • [^\s{}|]匹配除{ }or以外的非空白字符|
  • [^{}]*匹配 0+ 次除{ }or以外的任何字符|
  • } 比赛结束 }

正则表达式演示

  • @PeterSeliger是的,但这取决于OP允许匹配的内容。您建议的模式也将匹配“{|” }` (2认同)