首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >改进起作用的正则表达式

改进起作用的正则表达式
EN

Stack Overflow用户
提问于 2019-08-28 08:09:11
回答 1查看 40关注 0票数 1

我不是regex专家,所以请友好点:)

我创建了这个regex来验证用户是否提交了一周中的某一天(意大利语):

代码语言:javascript
运行
复制
/((lun|mart|giov)e|mercol(e?)|vener)d(ì|i('?)|í)|sabato|domenica/

这个regex 完美地工作了,它匹配以下内容:

  • lunedi
  • lunedμ
  • lunedí
  • 编辑I‘
  • martedi
  • mart编辑μ
  • martedí
  • 编辑的I‘
  • edi
  • 聚乙二醇edμ
  • edí
  • edI‘
  • 默尔科迪
  • 美冷μ
  • 莫罗西蒂
  • 默尔科迪
  • giovedi
  • giovedμ
  • giovedí
  • edI‘
  • venerdi
  • venerdμ
  • venerdí
  • venI‘
  • 萨巴托
  • 多梅尼察

现在考虑regex的第一部分,关注venerdì:正如您所看到的,我添加了一个OR (|),仅仅是为了管理venerdì日,仅仅是因为“r”的存在。

任何事情都能正常工作,但我想问的是,是否有任何方法可以以这种方式启动正则表达式:

代码语言:javascript
运行
复制
(lun|mar|giov|ven)e

然后用某种方式管理“r”。

我对backrefencesconditionals很感兴趣,但我不确定他们能帮上什么忙。

我的想法是:“如果第一组捕获‘ven’,那么在组结束后添加”r“到”e“。

这个是可能的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-28 08:28:15

不要“高尔夫”你的领地。如果你想改进它,让它更加可读性。虽然对于不同的"i“变体使用不同的情况当然是有价值的,但是其他的一切都应该尽可能的简单。

像这样的怎么样?

代码语言:javascript
运行
复制
(lune|marte|mercole?|giove|vener)d(ì|i'?|í)|sabato|domenica

如果你不需要的话,不要使用反向引用和其他高级特性,只是为了缩短你的正则表达式。即使你仍然理解这意味着什么,想想你的同事--或者仅仅是你自己--两个月后。

我刚刚删除了一些多余的(...)和“共享e”部分。注意(除了(...)),无论您使用(lun|mart|giov)e还是lune|marte|giove,它都是相同的长度,但是后者可以说是更易读的。类似地,反向引用或某些条件可能会使正则表达式更长,而不是更短--而且要复杂得多。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57687738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档