gpt4 book ai didi

JavaScript 正则表达式来记住遇到的最后一个括号类型

转载 作者:行者123 更新时间:2023-11-28 00:20:43 26 4
gpt4 key购买 nike

在 JavaScript 中希望能够匹配以下文本:

  • (用括号括起来)
  • [用方括号括起来]
  • 没有被任何类型的括号包围

在下面的表达式中...

none[square](round)(accept]able)[wrong).text

...应该有 4 个匹配项,分别为 none[square](round)(accept]能够)。但是 [wrong) 不应匹配,因为找不到结束 ]

my best attempt so far ...

([([])[A-Za-z]+[\])]|[^\[()\]]+

... (accept]able[wrong) 匹配不正确,而 (accept]able) 整体不匹配。我不太关心(accept]able);我宁愿没有任何匹配,也不愿进行不平衡括号的匹配。

我猜测我需要将 [\])] 表达式替换为检查初始匹配组的值的表达式,并使用 ) 如果第一个如果第一个匹配是 [,则匹配为 (]

我尝试过使用conditional expressions 。这些似乎在 PCRE 和 Python 中运行良好,但是 not in JavaScript .

这是一个可以在 JavaScript 正则表达式中单独解决的问题,还是我必须在庞大的 JavaScript 函数中处理这个零散的问题?

最佳答案

一种方法是匹配两种情况(可接受和 Not Acceptable )并将结果分为两个不同的捕获组。因此,无论您需要对结果做什么,您只需测试哪一组成功:

/(\[[^\]]*\]|\([^)]*\)|[a-z]+)|([\[(][\s\S]*?(?:[\])]|$))/gi

图案详细信息:

(  # acceptable capture group
\[ [^\]]* \]
|
\( [^)]* \)
|
[a-z]+
)
|
( # non-acceptable capture group
[\[(] [\s\S]*? (?: [\])] | $ ) # unclosed parens
)

此模式并不关心方括号是否包含在圆括号之间,反之亦然,但您可以轻松地使用此模式更加严格,禁止方括号(方括号或圆括号)之间存在任何其他方括号:

(  # acceptable capture group
\[ [^()\[\]]* \]
|
\( [^()\[\]]* \)
|
[a-z]+
)
|
( # non-acceptable capture group
[\[(] [\s\S]*? (?: [\])] | $ ) # unclosed parens
)

关于这两种模式的注意事项:当发现未闭合的括号时,您可以选择默认行为。这两种模式旨在在第一个右括号处停止 Not Acceptable 部分,或者如果在字符串末尾找不到 Not Acceptable 部分,但您可以更改此行为并选择非右括号始终停止在字符串末尾,如下所示: [\[(][\s\S]*$

关于JavaScript 正则表达式来记住遇到的最后一个括号类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30053444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com