Regex用于查找Java's在JavaScript中格式化字符串

Regex for finding Java's format strings in JavaScript

本文关键字:JavaScript 格式化 字符串 查找 用于 Java Regex      更新时间:2023-09-26

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

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

现在,我想写一个RegEx,它可以在JavaScript中工作,并允许您从给定的文本中提取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的Formatter类和printf格式字符串

问题出在这个组:(.[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通过。