首页 > 解决方案 > 匹配带有 [ 字符的行,但如果它有 ] 字符则不匹配

问题描述

我认为这个正则表达式会匹配带有 a 的行[,但如果它有 a 则不会]

^.*\[.*(?!\]).*$

相反,它匹配每一行[(以粗体显示):

这[应该匹配]。此行应匹配

这条线不应该匹配。

这条线不应该匹配。这条线[不应该匹配。

如何修复该正则表达式,使其与具有 ? 的行不匹配]

这[应该匹配]。此行应匹配

这条线不应该匹配。

这条线不应该匹配。这条线[不应该匹配。

演示:https ://regexr.com/67qk7

标签: javascriptregex

解决方案


此模式^.*\[.*(?!\]).*$匹配[并且直接跟随.*将匹配该行的其余部分。

然后在行尾它不会]直接断言到右边,这是真的,因为它已经在行尾了。然后.*是可选的,它可以断言字符串的结尾。

所以它会匹配任何至少有一个单行的整行[

如果您想匹配从左到右的方括号对,[...]并且不允许在其中使用任何括号,或者在其外部使用单个括号并匹配至少一对,您可以重复 1 次或多次匹配由可选字符包围的对而不是正方形括号。

^(?:[^\][\n]*\[[^\][\n]*\])+[^\][\n]*$

正则表达式演示


推荐阅读