我是一个完全不懂正则表达式的新手,花了几个小时尝试解决这个谜题。 我认为我必须使用某种可选的非捕获组或选择。
我想匹配以下字符串:
Neuer Film a von 1000
Neuer Film a von 1000 mit b
Neuer Film a von 1000 mit b und c
Neuer Film a von 1000 mit b und c und d
Neuer Film a mit b
Neuer Film a mit b und c
Neuer Film a mit b und c und d
我的正则表达式看起来像这样:
var regex = /(?:[nN]euer [Ff]ilm\s?)(.*)(?:[vV]on).(\d{4}).(?:[Mm]it)(.*)(?:[uU]nd)(.*)/g;
问题是它仅匹配字符串3和4。它不匹配最后两个"und",但将其打包在第3组而不是第4组中。
有人可以帮忙修复我的正则表达式吗(它并不非常用户友好;)
(...)?
就足够了)。我也从未想过这种懒惰点匹配。但我仍然不明白为什么第一个“und”没有被捕获,而后面的“und”却被捕获了,尽管它们在一个非捕获组中? - TrantSteel.*?
会尽可能地匹配少的字符,因此正则表达式会到达und
的最左边出现位置(用\s*[uU]nd\s*
进行匹配而不被捕获)。请注意,懒惰模式并不匹配两个字符串之间的 最短 子字符串(正如某些 SO 回答所述),它们只匹配随后子模式的最左边出现位置。 - Wiktor Stribiżew