【发布时间】:2019-04-09 19:26:17
【问题描述】:
我写了下面这行代码:
XRegExp.exec(data,
XRegExp('<!-- @\[(?<component>[\w+])[\(*(?<classes>[\w+])*\)]*\] -->', 'g'))
如您所见,它正在使用 XRegExp 库,因此我可以使用命名组其他 PCRE 功能。
我收到了错误:
syntaxError: Invalid regular expression: /<!-- @[(?<component>[w+])[(*(?<classes>[w+])*)]*] -->/: Unmatched ')'
但是,我不明白无与伦比的) 在哪里。据我所知,所有需要转义的括号都应该是,所有不应该的。
这是我要匹配的字符串:
<!-- @[NoteBlock(warning)] -->
这些也应该匹配:
<!-- @[NoteBlock(warning, high-level)] -->
<!-- @[NoteBlock] -->
这不应该匹配:
<!-- @[(warning, high-level)] -->
UDPATE:使用 Regex101 我设法让正则表达式通过:我已将正则表达式更新为 '<!-- @\[(?<component>[\w+]+)\(*(?<classes>[\w+]+)*\)*\] -->' 但我仍然遇到同样的错误。
【问题讨论】:
-
regex101.com/r/dv5vqu/1 不匹配
)是红色的 -
你的正则表达式对我来说看起来很复杂。我建议在正则表达式编辑器中将其拆开,直到您可以开始工作,然后再构建它。我看到了几个问题,但我没有解决方案,因为我不知道 XRegExp。
-
如果您希望反斜杠保留为正则表达式的一部分,请确保将其转义
-
在
(?<component>[\w+])[中,最后一个[没有转义。它创建了一个字符类。此外,在字符串文字中,要定义反斜杠,您需要使用双反斜杠。使用"<!-- @\\[(?<component>[\\w+])\\[\\(*(?<classes>[\\w+])*\\)]*] -->" -
您更新的正则表达式不匹配
<!-- @[NoteBlock(warning, high-level)] -->(和<!-- @[/ArticleSection] -->,但可能是预期的)
标签: javascript regex pcre xregexp