【问题标题】:XRegExp: "Unmatched ')'" Yet everything appears to be balanced [duplicate]XRegExp:“Unmatched ')'”但一切似乎都是平衡的[重复]
【发布时间】:2019-04-09 19:26:17
【问题描述】:

我写了下面这行代码:

XRegExp.exec(data,
    XRegExp('<!-- @\[(?<component>[\w+])[\(*(?<classes>[\w+])*\)]*\] -->', 'g'))

如您所见,它正在使用 XRegExp 库,因此我可以使用命名组其他 PCRE 功能。

我收到了错误:

syntaxError: Invalid regular expression: /&lt;!-- @[(?&lt;component&gt;[w+])[(*(?&lt;classes&gt;[w+])*)]*] --&gt;/: Unmatched ')'

但是,我不明白无与伦比的) 在哪里。据我所知,所有需要转义的括号都应该是,所有不应该的。

这是我要匹配的字符串:

&lt;!-- @[NoteBlock(warning)] --&gt;

这些也应该匹配:

&lt;!-- @[NoteBlock(warning, high-level)] --&gt;

&lt;!-- @[NoteBlock] --&gt;

这不应该匹配:

&lt;!-- @[(warning, high-level)] --&gt;

UDPATE:使用 Regex101 我设法让正则表达式通过:我已将正则表达式更新为 '&lt;!-- @\[(?&lt;component&gt;[\w+]+)\(*(?&lt;classes&gt;[\w+]+)*\)*\] --&gt;' 但我仍然遇到同样的错误。

【问题讨论】:

  • regex101.com/r/dv5vqu/1 不匹配 ) 是红色的
  • 你的正则表达式对我来说看起来很复杂。我建议在正则表达式编辑器中将其拆开,直到您可以开始工作,然后再构建它。我看到了几个问题,但我没有解决方案,因为我不知道 XRegExp。
  • 如果您希望反斜杠保留为正则表达式的一部分,请确保将其转义
  • 在(?&lt;component&gt;[\w+])[ 中,最后一个[ 没有转义。它创建了一个字符类。此外,在字符串文字中,要定义反斜杠,您需要使用双反斜杠。使用"&lt;!-- @\\[(?&lt;component&gt;[\\w+])\\[\\(*(?&lt;classes&gt;[\\w+])*\\)]*] --&gt;"
  • 您更新的正则表达式不匹配 &lt;!-- @[NoteBlock(warning, high-level)] --&gt;(和 &lt;!-- @[/ArticleSection] --&gt;,但可能是预期的)

标签: javascript regex pcre xregexp


【解决方案1】:

我已更新我的答案以符合所提供的新信息。

鉴于您尝试捕获的原始正则表达式不匹配的示例。

以下内容将匹配 [( 到组件以及 () 到类之间的任何字符。

\w 匹配单词、数字或下划线。 这会让它丢失你的 [-,] 字符

希望这会有所帮助。

<!-- @\[(?<component>[\w]*)\((?<classes>.*?)\)*\] -->

@[组件(类 - 警告,高级)]

【讨论】:

  • 小修正:'\w 匹配一个单词,数字' - 不是空格。
  • 感谢@PoulBak,我已将我的修改为包含下划线而不是空格。
猜你喜欢
  • 2014-06-14
  • 1970-01-01
  • 2011-12-01
  • 2018-01-18
  • 1970-01-01
  • 1970-01-01
  • 2021-02-27
相关资源
最近更新 更多