javascript - 将函数输入限制为给定的正则表达式格式

标签 javascript node.js regex npm ecmascript-6

我有一个函数接受一个输入,一个数组,可以有 X 个值。我有一个字符串,表示所需的最终格式。

例子:

function doFormat(args) {
  const format = 'Foo \\d{1,2}x\\d{2} Bar';
}

doFormat([123, 2, 3]);

现在,我们假设 format 将只包含一个匹配数字与 \\d 的正则表达式模式,并且输入将只包含数字。

在这个具体示例中,我想将输入参数强制转换为字符串 Foo 12x02 Bar,这是 format 变量所要求的,因为 的第一个匹配项>\\d{1,2} 将其限制为最大长度为 2 的整数(因此将第一个输入从 123 trim 为 12 ),并且 \\d{2} 的第二个匹配项限制为长度恰好为 2 的整数(因此填充第二个输入,从 2 02)。我们删除 3 的第三个输入,因为它没有在 format 中使用。

我怎样才能做到这一点?我在服务器上运行的 Node 脚本中使用它,因此如果需要,我可以使用任何 NPM 包。

最佳答案

我创建了名为 to-fmt 的 npm 包,它使用文字模板来生成新的字符串渲染器函数。

对于您的情况,它可以像这样工作:

import f from 'to-fmt';

// Number formatter function
const num = (...args) => value => {
    let start;
    let end;

    const str = String(value);

    if (args.length > 1) {
        start = args[0];
        end = start + args[1];
    }
    else if (args.length) {
        start = 1;
        end = 1 + args[0];
    }
    else {
        start = 1;
        end = str.length;
    }

    const len = end - start;

    return str.slice(start - 1, end - 1)
    .padStart(len, '0')
    .slice(-len);
};

// Create new format:
const format = f`Foo ${num(1, 2)}x${num(2)} Bar`;

format(123, 2, 3); // -> 'Foo 12x02 Bar'
// And if you want to pass an Array
format(...[123, 2, 3]); // -> 'Foo 12x02 Bar'

使用 template literal可以创建自定义字符串格式化程序(以及任何你想要的)。提供的包使用它来产生新功能。它要求占位符是一个可以将值转换为字符串的函数。

关于javascript - 将函数输入限制为给定的正则表达式格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49929943/

相关文章:

javascript - 在类中将 es6 变量设置为全局变量

javascript - 数据属性中的未定义值

node.js - 将 Simple OAuth2 与 NodeJS 结合使用时,内容类型与 JSON 不兼容

node.js - DialogFlow v2 错误 : Resource name '' does not match 'projects/*/locations/*/agent/environments/*/users/*/sessions/*'

PHP:将 preg_replace 与 htmlentities 结合使用

javascript - meteor JS : Inconsistency with Meteor JS when dealing with cursors?

javascript - 将包含对象数组的 javascript 对象格式化为数组数组

node.js - 如何在nodejs Express重定向上启用CORS?

regex - 是否有任何正则表达式模式来匹配 Excel 工作表名称和地址,即单元格引用

javascript - 使用 javascript 查找最后一次出现的字符