用于在JavaScript中查找Java格式字符串的正则表达式

时间:2013-08-19 00:11:44

标签: java javascript android regex string-formatting

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

简单示例包括%s%1$d

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

我的解决方案将是以下RegEx:

%(([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)。但似乎适用于所有其他(更复杂)的案例。

我在这里问的是:你会说这是一个好的(正确的)RegEx还是什么都没有?

我的语法来源是:Android's Formatter classprintf format strings

1 个答案:

答案 0 :(得分:4)

问题在于这个群体:(.[0-9]*)

您希望首先%,然后上述群组中的.期待其中一个(不是可选的)。然后(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. .中的(.[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通过。