改进有效的正则表达式

Improve regex that works

我不是正则表达式专家,所以请保持友好:-)

我创建了这个正则表达式来验证用户是否提交了星期几(意大利语):

/((lun|mart|giov)e|mercol(e?)|vener)d(ì|i('?)|í)|sabato|domenica/

这个正则表达式 完美工作 并且它匹配以下内容:

现在考虑 regex 的第一部分并关注 venerdì:如您所见,我添加了一个 OR (|) 只是为了管理venerdì天,就因为那个“r”的存在。

一切正常,但我想问一下是否有任何方法可以这样启动正则表达式:

(lun|mar|giov|ven)e

然后以某种方式管理那个“r”。

我对 backrefencesconditionals 很生气,但我不确定它们是否能提供任何帮助。

我的想法是这样的:“如果第一组捕获了'ven',则在该组结束后立即将“r”添加到“e”。

这可能吗?

不要 "golf" 你的正则表达式。如果你想改进它,让它更具可读性。虽然对于不同的 "i" 变体使用不同的案例当然是值得的,但恕我直言,其他一切都应该尽可能简单。

这样的怎么样?

(lune|marte|mercole?|giove|vener)d(ì|i'?|í)|sabato|domenica

如果您不需要反向引用和其他高级功能,请不要使用它们,只是为了让您的正则表达式更短几个字符。即使 仍然理解它的意思,想想你的共同开发者伙伴——或者两个月后的你自己。

我刚刚删除了一些多余的 (...) 和 "shared e" 部分。请注意(除了 (...))它是如何相同的长度,无论您使用 (lun|mart|giov)e 还是 lune|marte|giove,但后者可以说更具可读性。同样,反向引用或某些条件可能会使您的正则表达式 更长 而不是更短 - 并且 相当 更复杂。