to-regex-range

中文文档
5.0.1发布于 2019/04/07MITCommonJS近 30 天下载 6.3亿

传递两个数字,获得匹配范围的regex兼容源字符串。根据超过278万个测试断言进行验证。

中文使用文档
文档目录20 节
  1. 安装
  2. 方便
  3. 大量测试
  4. 优化
  5. 用法
  6. 选项
  7. options.capture
  8. options.shorthand
  9. options.relaxZeros
  10. 例子
  11. 小心!
  12. 历史
  13. V2.0.0 - 2017-04-21
  14. v1.0.0
  15. 归因
  16. 关于
  17. 相关项目
  18. 贡献者
  19. 作者
  20. 许可证

到正则表达式范围 Donate NPM version NPM monthly downloads NPM total downloads Linux Build Status

传递两个数字,获得匹配范围的regex兼容源字符串。根据超过278万个测试断言进行验证。

请考虑跟随这个项目的作者, Jon Schlinkert,并考虑主演该项目,以展示您的: 心: 和支持。

安装

安装与 npm:

$ npm install --save to-regex-range
这是做什么的?

这个库生成 source 要传递给的字符串 new RegExp() 用于匹配一系列数字。

例子

const toRegexRange = require('to-regex-range');
const regex = new RegExp(toRegexRange('15', '95'));

返回一个字符串,以便您可以在将其传递给之前对其执行任何需要的操作 new RegExp() (比如添加 ^ 或 $ 边界,定义标志,或将其组合为另一个字符串)。


为什么要使用这个库?

方便

创建用于匹配数字的正则表达式变得非常复杂。

例如,假设您需要一个验证正则表达式来匹配用户id、邮政编码、社会保险号、税号等的一部分:

  • 用于匹配的正则表达式 1 = > /1/ (简单)
  • 用于匹配的正则表达式 1 通过 5 = > /[1-5]/ (不坏…)
  • 用于匹配的正则表达式 1 或 5 = > /(1|5)/ (仍然容易…)
  • 用于匹配的正则表达式 1 通过 50 = > /([1-9]|[1-4][0-9]|50)/ (哦…)
  • 用于匹配的正则表达式 1 通过 55 = > /([1-9]|[1-4][0-9]|5[0-5])/ (没问题,我能做到……)
  • 用于匹配的正则表达式 1 通过 555 = > /([1-9]|[1-9][0-9]|[1-4][0-9]{2}|5[0-4][0-9]|55[0-5])/ (也许不是…)
  • 用于匹配的正则表达式 0001 通过 5555 = > /(0{3}[1-9]|0{2}[1-9][0-9]|0[1-9][0-9]{2}|[1-4][0-9]{3}|5[0-4][0-9]{2}|55[0-4][0-9]|555[0-5])/ (好吧,我明白了!)

这些数字是人为的,但它们也是非常基本的。在现实世界中,您可能需要动态地生成一个正则表达式来进行验证。

了解更多

如果你有兴趣了解更多 字符类 和其他正则表达式特性,我个人总是发现 regular-expressions.info 非常有用。

大量测试

截至2019年4月7日,该库运行 >1m测试断言 针对生成的regex范围提供强力验证结果是否正确。

在我的2.5 GHz Intel Core i7 MacBook Pro上,测试运行时间约为280毫秒。

优化

优化生成的正则表达式:

  • 使用量词减少重复序列和字符类
  • 足够聪明地使用 ? 当数字或范围可以是正数或负数时的条件
  • 使用片段缓存来避免多次处理相同的字符串

用法

用下面的代码行将这个库添加到javascript应用程序中

const toRegexRange = require('to-regex-range');

主要导出是一个接受两个整数的函数: min 价值和 max 值(格式化为字符串或数字)。

const source = toRegexRange('15', '95');
//=> 1[5-9]|[2-8][0-9]|9[0-5]

const regex = new RegExp(`^${source}$`);
console.log(regex.test('14')); //=> false
console.log(regex.test('50')); //=> true
console.log(regex.test('94')); //=> true
console.log(regex.test('96')); //=> false

选项

options.capture

类型: boolean

Deafault: undefined

当有多个正则表达式条件时,将返回值用圆括号括起来。在动态生成范围时非常有用。

console.log(toRegexRange('-10', '10'));
//=> -[1-9]|-?10|[0-9]

console.log(toRegexRange('-10', '10', { capture: true }));
//=> (-[1-9]|-?10|[0-9])

options.shorthand

类型: boolean

Deafault: undefined

使用regex的简写 [0-9]:

console.log(toRegexRange('0', '999999'));
//=> [0-9]|[1-9][0-9]{1,5}

console.log(toRegexRange('0', '999999', { shorthand: true }));
//=> \d|[1-9]\d{1,5}

options.relaxZeros

类型: boolean

默认的: true

当范围填充零时,此选项放宽前导零的匹配。

const source = toRegexRange('-0010', '0010');
const regex = new RegExp(`^${source}$`);
console.log(regex.test('-10')); //=> true
console.log(regex.test('-010')); //=> true
console.log(regex.test('-0010')); //=> true
console.log(regex.test('10')); //=> true
console.log(regex.test('010')); //=> true
console.log(regex.test('0010')); //=> true

当 relaxZeros 为false,匹配严格:

const source = toRegexRange('-0010', '0010', { relaxZeros: false });
const regex = new RegExp(`^${source}$`);
console.log(regex.test('-10')); //=> false
console.log(regex.test('-010')); //=> false
console.log(regex.test('-0010')); //=> true
console.log(regex.test('10')); //=> false
console.log(regex.test('010')); //=> false
console.log(regex.test('0010')); //=> true

例子

范围结果编译时
toRegexRange(-10, 10)-[1-9]|-?10|[0-9]132μs
toRegexRange(-100, -10)-1[0-9]|-[2-9][0-9]|-10050μs
toRegexRange(-100, 100)-[1-9]|-?[1-9][0-9]|-?100|[0-9]42μs
toRegexRange(001, 100)0{0,2}[1-9]|0?[1-9][0-9]|100109μs
toRegexRange(001, 555)0{0,2}[1-9]|0?[1-9][0-9]|[1-4][0-9]{2}|5[0-4][0-9]|55[0-5]51μs
toRegexRange(0010, 1000)0{0,2}1[0-9]|0{0,2}[2-9][0-9]|0?[1-9][0-9]{2}|100031日μs
toRegexRange(1, 50)[1-9]|[1-4][0-9]|5024μs
toRegexRange(1, 55)[1-9]|[1-4][0-9]|5[0-5]23μs
toRegexRange(1, 555)[1-9]|[1-9][0-9]|[1-4][0-9]{2}|5[0-4][0-9]|55[0-5]30μs
toRegexRange(1, 5555)[1-9]|[1-9][0-9]{1,2}|[1-4][0-9]{3}|5[0-4][0-9]{2}|55[0-4][0-9]|555[0-5]43μs
toRegexRange(111, 555)11[1-9]|1[2-9][0-9]|[2-4][0-9]{2}|5[0-4][0-9]|55[0-5]38μs
toRegexRange(29, 51)29|[34][0-9]|5[01]24μs
toRegexRange(31, 877)3[1-9]|[4-9][0-9]|[1-7][0-9]{2}|8[0-6][0-9]|87[0-7]32μs
toRegexRange(5, 5)58μs
toRegexRange(5, 6)5|611μs
toRegexRange(1, 2)1|26μs
toRegexRange(1, 5)[1-5]15μs
toRegexRange(1, 10)[1-9]|1022μs
toRegexRange(1, 100)[1-9]|[1-9][0-9]|10025μs
toRegexRange(1, 1000)[1-9]|[1-9][0-9]{1,2}|100031日μs
toRegexRange(1, 10000)[1-9]|[1-9][0-9]{1,3}|1000034μs
toRegexRange(1, 100000)[1-9]|[1-9][0-9]{1,4}|10000036μs
toRegexRange(1, 1000000)[1-9]|[1-9][0-9]{1,5}|100000042μs
toRegexRange(1, 10000000)[1-9]|[1-9][0-9]{1,6}|1000000042μs

小心!

参数顺序

当 min 大于 max,值将被翻转以创建一个有效的范围:

toRegexRange('51', '29');

有效地翻转为:

toRegexRange('29', '51');
//=> 29|[3-4][0-9]|5[0-1]

步骤/增量

此库不支持步骤(增量)。一个增加支持的公关将是受欢迎的。

历史

V2.0.0 - 2017-04-21

新功能

增加了对零填充的支持!

v1.0.0

优化

重复的范围现在使用量词进行分组。处理时间大致相同,但生成的正则表达式要小得多,这应该会导致更快的匹配。

归因

受到python库的启发 range-regex。

关于

贡献

拉请求和明星总是受欢迎的。对于bug和特性请求, 请创建一个问题。

运行测试

运行和审查单元测试是熟悉库及其API的好方法。可以使用以下命令安装依赖项并运行测试:

$ npm install && npm test
建立文档

(这个项目的自述。Md由 动词请不要直接编辑自述文件。对自述文件的任何更改都必须在 .verb.md 自述文件模板)。

使用实例生成自述文件。

$ npm install -g verbose/verb#dev verb-generate-readme && verb

你也可能对这些项目感兴趣:

  • expand-range:快速的,像猛击一样的范围扩张。展开数字或字母(大写或小写)的范围。使用…… 更多的 | 首页
  • fill-range:填写数字或字母的范围,可选择传递一个增量或 step …… 更多的 | 首页
  • micromatch: javascript/node.js的全局匹配。一个插入的替代品和更快的选择,以最小化匹配和多匹配。| 首页
  • repeat元素:通过重复给定值n次来创建一个数组。| 首页
  • repeat-string:重复给定字符串n次。重复字符串的最快实现。| 首页

贡献者

| 提交 | 贡献者 |
| --- | --- |
| 63 | jonschlinkert |
| 3 | doowb |
| 2 | realityking |

作者

Jon Schlinkert

请考虑在Patreon上支持我,或者 创建自己的Patreon页面!

许可证

版权所有©2019 Jon Schlinkert。 根据 麻省理工学院的许可。


该文件由 动词-生成-自述文件v0.8.0,于2019年4月7日发布。

版本与发布记录

to-regex-range 共发布 18 个版本,首次发布于 2015/08/07;过去 12 个月发布了 0 个版本。

版本发布日期距今
5.0.1latest2019/04/077 年前
5.0.02019/04/077 年前
4.0.32019/01/187 年前
4.0.22018/07/268 年前
4.0.12018/07/048 年前
4.0.02018/07/048 年前

关于 to-regex-range 的常见问题

to-regex-range 是什么?

传递两个数字,获得匹配范围的regex兼容源字符串。根据超过278万个测试断言进行验证。

如何安装 to-regex-range?

在项目目录运行 npm install to-regex-range,或使用 pnpm add / yarn add / bun add。

to-regex-range 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/to-regex-range 是否存在。

to-regex-range 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

to-regex-range 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=8.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

to-regex-range 可以商用吗?

to-regex-range 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

to-regex-range 的下载量有多少?

根据 npm 官方下载统计,to-regex-range 在 2026/10/04 – 2026/11/02 这 30 天内被下载 626,961,541 次,日均约 20,898,718 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

to-regex-range 还在维护吗?

最新版本 5.0.1 发布于 2019/04/07(7 年前);至今共发布 18 个版本,其中过去 12 个月发布了 0 个;首次发布于 2015/08/07。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。