1

在 Java/Android 中,您可以使用格式字符串来指定某些 Outlook 的外观。例如,这些格式字符串可以传递给String.format()Formatter()

简单的例子是%sor %1$d

现在我想编写一个在 JavaScript 中工作的 RegEx,让您从给定的文本中提取 Java 的格式字符串。

我的解决方案是以下正则表达式:

%(([0-9]+\$)?)([,+ (\-#0]*)([0-9]*)(.[0-9]*)((hh|h|l|ll|L|z|j|t)*)(d|i|u|f|F|e|E|g|G|x|X|o|s|S|c|C|a|A|b|B|h|H|p|n|%)

但是,这甚至不适用于最简单的情况 ( %s)。但它似乎适用于所有其他(更复杂的)案例。

我在这里要问的是:你会说这是一个好的(正确的)正则表达式还是缺少什​​么?

我的语法来源是:Android's Formatter class and printf format strings

4

1 回答 1

4

问题出在这组:(.[0-9]*)

%首先期望 a ,然后.上述组中的期望是某些东西(不是可选的)。然后(d|i|u|f|F|e|E|g|G|x|X|o|s|S|c|C|a|A|b|B|h|H|p|n|%)也在期待着什么。

所以基本上你的正则表达式中唯一需要的项目是:
1. %
2. .in (.[0-9]*)
3.(d|i|u|f|F|e|E|g|G|x|X|o|s|S|c|C|a|A|b|B|h|H|p|n|%)

里面没有空间%s来容纳%.以及你想要拉的块s

我不确定你到底想(.[0-9]*)成为什么,但让它成为可选的(.[0-9]*)?至少会让%s你通过。

于 2013-08-19T00:16:05.137 回答