我有一个字符串,其中我试图捕获所有内容,直到第一个“〜”,不后面的“=”。
input.error[data-groups~=5]~label.light[data-groups~=5]
│ │
└ Desired capture region ┘
如果我理解正确,为此我应该使用负向前看
到目前为止,这是我的尝试:
(^[^~]+(?!=))
这个想法是[^~]+
将消耗所有内容,直到遇到“〜”,前提是它没有使用指令(?!=)
但是这个表达式只捕获到第一个“〜”
的所有内容抱歉如果这看起来很糟糕,正则表达式并不是我的强项。
答案 0 :(得分:2)
你几乎就在那里:你忘了真正匹配~
!
(^[^~]*~(?!=))
不,不完全:这会找到一个〜后面没有=
,但一定不能有任何波浪线。所以它仍然会失败。你可以扩展你的正则表达式,但在我看来,通过使用"非贪婪的"来匹配到第一个符合条件~
之前会更简单。通配符:
(^.*?~(?!=))
这将在第一场比赛时停止,但在此之前将匹配任何内容。
答案 1 :(得分:2)
尝试使用.*?~
代替[^~]+
:
^(.*?~)(?!=)