从 cli args 中提取 xgettext 函数名称和参数的正则表达式

Regular expression to extract xgettext function names and params from cli args

我正在开发一个 CLI 应用程序,它允许用户指定带有函数名称和参数的参数。它实际上使用与 xgettext 相同的语法,例如:

--keywords=__,dgettext:2,dcgettext:2,ngettext:1,2,dpgettext2:2c,3

我需要找出一个正则表达式,将其分解成这样的数组:

['__', 'dgettext:2', 'dcgettext:2', 'ngettext:1,2', 'dpgettext2:2c,3'];

我该怎么做(例如 Javascript)?

这是我目前的情况:

(((?!([0-9\s,])).|^)[a-zA-Z_]+[A-Za-z0-9_]*[:]*([0-9]*[a-z]*,*)*)

显然这有一个问题:它每次都会捕获逗号。知道我怎么能把它去掉吗?

您可以使用像这样的正则表达式来使用具有正前瞻性的正则表达式:

,(?=\w+gettext)

Working demo

var pattern = /(([\w_]+:\w+(,\w+)*)(?=(,[\w_]+:)|(,_+)|($)))|(_+)/g ;
var test = "--keywords=__,dgettext:2,dcgettext:2,nGettext:1,2,dpgettext2:2c,3,N_:1";
var n = test.match(pattern);
alert(n.length);
alert(n);

这会查找 symbol:hex,(hex)。 dcgettext:2,2c就是这样一个模式。正则表达式是我的符号是 [\w_+],所以整体的模式是。 /[\w_]+:\w+(,\w+)*/ 其中我使用 \w 表示 'hex'。我可以使用 [0-9a-f]+ 作为十六进制,这会更正确,但更难阅读。

然后我进一步限定,要求组后跟一个逗号和另一个组,或逗号和下划线组,或行尾。我这样写 (?=(,[\w_]+:)|(,_+)($)).

最后,我也接受独立的下划线组作为 (_+)。

我不知道这是否可以处理所有形式的 xgettext,我只使用了您的示例文本。如果您想要更好的正则表达式,请提供更多示例文本。

根据@Fede 的回答,这是一个完全符合我需要的完整片段:

// The last keyword is invalid - it begins with a number,
// which is not allowed, so it should not considered a separate keyword
var keywords = "__,dgettext:2,dcgettext:2,ngettext:1,2,dpgettext2:2c,3,__,_n,_,2";
keywords.split(/,(?=[a-z_]+\w*)/gi);

它的作用是查找后跟有效关键字的逗号,然后根据逗号将字符串拆分为数组,这正是我所需要的。