# to-regex-range 中文文档

规范地址：https://npmcn.com/package/to-regex-range/

版本：5\.0\.1
npm 元数据更新时间：2022-06-27T07:24:37.330Z
中文译文更新时间：2026-11-04T22:02:37.014Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/to-regex-range
原文对照：https://npmcn.com/package/to-regex-range/?lang=original
项目主页：https://github.com/micromatch/to-regex-range
源码仓库：https://github.com/micromatch/to-regex-range

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：22.9 kB，4 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- Node.js 要求：\>=8\.0
- 运行依赖：1 个
- 首次发布：2015-08-07T10:48:06.053Z
- 最新版本发布：2019-04-07T06:04:37.030Z
- 近 30 天下载量：626961541（2026-10-04 至 2026-11-02，npm 官方下载统计）
- 已发布版本数：18（近 12 个月 0 个）

## 中文简介

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

## 安装

```sh
npm install to-regex-range
```

也可以使用：`pnpm add to-regex-range`、`yarn add to-regex-range`、`bun add to-regex-range`

## README

# 到正则表达式范围 [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=W8YFZ425KND68) [![NPM version](https://img.shields.io/npm/v/to-regex-range.svg?style=flat)](https://www.npmjs.com/package/to-regex-range) [![NPM monthly downloads](https://img.shields.io/npm/dm/to-regex-range.svg?style=flat)](https://npmjs.org/package/to-regex-range) [![NPM total downloads](https://img.shields.io/npm/dt/to-regex-range.svg?style=flat)](https://npmjs.org/package/to-regex-range) [![Linux Build Status](https://img.shields.io/travis/micromatch/to-regex-range.svg?style=flat&label=Travis)](https://travis-ci.org/micromatch/to-regex-range)

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

请考虑跟随这个项目的作者， [Jon Schlinkert](https://github.com/jonschlinkert),并考虑主演该项目，以展示您的: 心: 和支持。

## 安装

安装与 [npm](https://www.npmjs.com/)：

```sh
$ npm install --save to-regex-range
```

**这是做什么的？**  

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

**例子**

```js
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])/` （好吧，我明白了！）

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

**了解更多**

如果你有兴趣了解更多 [字符类](http://www.regular-expressions.info/charclass.html) 和其他正则表达式特性，我个人总是发现 [regular-expressions.info](http://www.regular-expressions.info/charclass.html) 非常有用。

### 大量测试

截至2019年4月7日，该库运行 [\>1m测试断言](https://npmcn.com/package/to-regex-range/test/test.js) 针对生成的regex范围提供强力验证结果是否正确。

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

### 优化

优化生成的正则表达式：

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

  

## 用法

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

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

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

```js
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`

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

```js
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]`：

```js
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`

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

```js
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，匹配严格：

```js
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]|-100` | _50μ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]|100` | _109μ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}|1000` | _31日μs_ |
| `toRegexRange(1, 50)` | `[1-9]|[1-4][0-9]|50` | _24μ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)` | `5` | _8μs_ |
| `toRegexRange(5, 6)` | `5|6` | _11μs_ |
| `toRegexRange(1, 2)` | `1|2` | _6μs_ |
| `toRegexRange(1, 5)` | `[1-5]` | _15μs_ |
| `toRegexRange(1, 10)` | `[1-9]|10` | _22μs_ |
| `toRegexRange(1, 100)` | `[1-9]|[1-9][0-9]|100` | _25μs_ |
| `toRegexRange(1, 1000)` | `[1-9]|[1-9][0-9]{1,2}|1000` | _31日μs_ |
| `toRegexRange(1, 10000)` | `[1-9]|[1-9][0-9]{1,3}|10000` | _34μs_ |
| `toRegexRange(1, 100000)` | `[1-9]|[1-9][0-9]{1,4}|100000` | _36μs_ |
| `toRegexRange(1, 1000000)` | `[1-9]|[1-9][0-9]{1,5}|1000000` | _42μs_ |
| `toRegexRange(1, 10000000)` | `[1-9]|[1-9][0-9]{1,6}|10000000` | _42μs_ |

## 小心!

**参数顺序**

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

```js
toRegexRange('51', '29');
```

有效地翻转为：

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

**步骤/增量**

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

## 历史

### V2.0.0 - 2017-04-21

**新功能**

增加了对零填充的支持！

### v1.0.0

**优化**

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

## 归因

受到python库的启发 [range-regex](https://github.com/dimka665/range-regex)。

## 关于

**贡献**

拉请求和明星总是受欢迎的。对于bug和特性请求， [请创建一个问题](https://npmcn.com/issues/new)。

**运行测试**

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

```sh
$ npm install && npm test
```
**建立文档**

_(这个项目的自述。Md由 [动词](https://github.com/verbose/verb-generate-readme)请不要直接编辑自述文件。对自述文件的任何更改都必须在 [.verb.md](https://npmcn.com/package/to-regex-range/.verb.md) 自述文件模板)。_

使用实例生成自述文件。

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

### 相关项目

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

-   [expand-range](https://www.npmjs.com/package/expand-range)：快速的，像猛击一样的范围扩张。展开数字或字母（大写或小写）的范围。使用…… [更多的](https://github.com/jonschlinkert/expand-range) | [首页](https://github.com/jonschlinkert/expand-range "Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. Used by micromatch.")
-   [fill-range](https://www.npmjs.com/package/fill-range)：填写数字或字母的范围，可选择传递一个增量或 `step` …… [更多的](https://github.com/jonschlinkert/fill-range) | [首页](https://github.com/jonschlinkert/fill-range "Fill in a range of numbers or letters, optionally passing an increment or `step` to use, or create a regex-compatible range with `options.toRegex`")
-   [micromatch](https://www.npmjs.com/package/micromatch)： javascript/node.js的全局匹配。一个插入的替代品和更快的选择，以最小化匹配和多匹配。| [首页](https://github.com/micromatch/micromatch "Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.")
-   [repeat元素](https://www.npmjs.com/package/repeat-element)：通过重复给定值n次来创建一个数组。| [首页](https://github.com/jonschlinkert/repeat-element "Create an array by repeating the given value n times.")
-   [repeat-string](https://www.npmjs.com/package/repeat-string)：重复给定字符串n次。重复字符串的最快实现。| [首页](https://github.com/jonschlinkert/repeat-string "Repeat the given string n times. Fastest implementation for repeating a string.")

### 贡献者

| **提交** | **贡献者** |  
| --- | --- |  
| 63 | [jonschlinkert](https://github.com/jonschlinkert) |  
| 3 | [doowb](https://github.com/doowb) |  
| 2 | [realityking](https://github.com/realityking) |

### 作者

**Jon Schlinkert**

-   [GitHub概要](https://github.com/jonschlinkert)
-   [Twitter](https://twitter.com/jonschlinkert)
-   [LinkedIn的资料](https://linkedin.com/in/jonschlinkert)

请考虑在Patreon上支持我，或者 [创建自己的Patreon页面](https://patreon.com/invite/bxpbvm)！

[![](https://c5.patreon.com/external/logo/become_a_patron_button@2x.png)](https://www.patreon.com/jonschlinkert)

### 许可证

版权所有©2019 [Jon Schlinkert](https://github.com/jonschlinkert)。 根据 [麻省理工学院的许可](https://npmcn.com/package/to-regex-range/LICENSE)。

* * *

_该文件由 [动词-生成-自述文件](https://github.com/verbose/verb-generate-readme)v0.8.0，于2019年4月7日发布。_

## 常见问题

### 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 和提交记录判断。

