【发布时间】:2013-10-07 16:56:44
【问题描述】:
我有一个像这样的字符串 "%d-%m-%Y" ,这些术语中的任何一个都可以是任何顺序,破折号可以是另一个字符串 (%x)。 我想得到结果: "%d %m %Y" 。 我烘焙了一个简单的正则表达式,如果我将条款设为可选,它就无法正常工作: (在 chrome 控制台中执行此操作:)
"%d-%m-%Y HH:%i".replace(/.*?((%Y|%m|%d)?.*?(%Y|%m|%d)?.*?(%Y|%m|%d)?).*/, "$1 $2 $3 $4")
我有这个(%Y|%m|%d)?作为可选的 3 次 .*? (非贪婪的东西)他们之间。
如果我运行上面的代码行,输出是:
"%d %d "
如果我从 (%Y|%m|%d) 中删除可选标记?然后表达式按预期工作。 我需要这些条款是可选的。 有人可以向我解释一下可选标记是怎么回事,这种类型的正则表达式可以完成吗?
【问题讨论】:
-
如果是可选的,您的意思是
"%d-%m"也合法吗?我假设"%d-%d"是不合法的,因此我会说正则表达式在这里不是正确的工具——我不确定你是否可以使用 Java 的正则表达式引擎(或任何其他引擎)来做到这一点,即使它可能很难。 -
是的,“%d-%m”是合法的,“%d-%d”不可能发生..
-
那么,您需要全部 3 个,但只需要一次,以任意顺序以及介于两者之间的任何内容?
-
是的,所有 3 2 或 1 以任何顺序排列,并且介于两者之间。 (我现在正在分析您的答案,它不会在 javascript 中替换为“”)
标签: java javascript regex