2

我正在尝试使用自定义正则表达式(也使用默认的 i18n.t 函数)从 html 文件中解析“data-i18n”属性:

i18next modules/ -o lang/ -r '[^a-zA-Z0-9](?:(?:t)|(?:i18n\\.t)|(?:data-i18n))(?:\\(|\\s|=)\\s*(?:(?:\'((?:(?:\\\\\')?[^\']+)+[^\\\\])\')|(?:"((?:(?:\\\\")?[^"]+)+[^\\\\])"))'

解析器可以在这里找到: https ://github.com/karellm/i18next-parser

来自文档的命令:

i18next /path/to/file/or/dir -r "(.*)"

正则表达式已在 regexpal 和 debuggex 上进行了测试,它匹配正确的标签:

[^a-zA-Z0-9](?:(?:t)|(?:i18n\.t)|(?:data-i18n))(?:\(|\s|=)\s*(?:(?:'((?:(?:\\')?[^']+)+[^\\])')|(?:"((?:(?:\\")?[^"]+)+[^\\])"))

我尝试以各种形式转义正则表达式字符串,但它不起作用。如何正确地做到这一点?

4

1 回答 1

2

考虑使用 gulp,如下所示:

var i18next = require("i18next-parser");
var gulp = require("gulp");

gulp.task("i18next-parse", function () {
    gulp.src("js/modules/**")
        .pipe(i18next({locales: ['en', 'hu'],
            parser: '[^a-zA-Z0-9](?:(?:t)|(?:i18n\\.t)|(?:data-i18n))(?:\\(|\\s|=)\\s*(?:(?:\'((?:(?:\\\\\')?[^\']+)+[^\\\\])\')|(?:"((?:(?:\\\\")?[^"]+)+[^\\\\])"))',
            output: "js/lang"})
            .on('reading', function(path) {
                console.log("Reading: " + path);
            })
            .on('writing', function(path) {
                console.log("Writing: " + path);
            }))
        .pipe(gulp.dest('js/lang'));
});

您可以通过这种方式传递正则表达式(这是您尝试在命令行中传递的问题)。

于 2014-07-31T14:55:18.267 回答