如何仅使用几个插件加载 XRegExp?



我搜索了XRegExp的网站和GitHub自述文件。那里唯一的示例加载xregexp-all.js,这正是我不想做的,因为它加载了所有插件。搜索SO,我找到了这样的例子:

<script src="xregexp.js"></script>
<script src="addons/unicode-base.js"></script>
<script src="addons/unicode-categories.js"></script>

但是尝试上述方法只会导致ReferenceError: exports is not defined.

如何仅加载带有部分插件的 XRegExp?

您显示的用法script可能适用于早期版本的 XRegExp,但现在已经过时,并且新用法似乎没有记录在任何地方。

您可以使用script标记加载xregexp-all.js,因为它在文件的最开头有一个 UMD 包装器,允许这种用法。但是,如果您查看 XRegExp 附带的转插件文件,您会在每个插件中看到如下代码:

'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = function (XRegExp) {
// ...
};

这告诉你两件事。一是插件是模块,句号。它们没有 UMD 包装器,因此用script加载它们将不起作用。其次,插件导出一件事:函数。正如参数的名称所暗示的那样,您需要将 XRegExp 库本身传递给它,以便插件可以自行安装。在存储库的src/index.js源中找到了进一步的线索。它包含:

import XRegExp from './xregexp';
import build from './addons/build';
import matchRecursive from './addons/matchrecursive';
import unicodeBase from './addons/unicode-base';
import unicodeBlocks from './addons/unicode-blocks';
import unicodeCategories from './addons/unicode-categories';
import unicodeProperties from './addons/unicode-properties';
import unicodeScripts from './addons/unicode-scripts';
build(XRegExp);
matchRecursive(XRegExp);
unicodeBase(XRegExp);
unicodeBlocks(XRegExp);
unicodeCategories(XRegExp);
unicodeProperties(XRegExp);
unicodeScripts(XRegExp);
export default XRegExp;
使用npm

安装 XRegExp后,这是我在我的一个项目(必须在 ES5 引擎上按原样运行(中使用的,我只想用一些 Unicode 插件加载 XRegExp,没有别的:

var XRegExp = require("xregexp/lib/xregexp");
var base = require("xregexp/lib/addons/unicode-base");
var blocks = require("xregexp/lib/addons/unicode-blocks");
var categories = require("xregexp/lib/addons/unicode-categories");
base(XRegExp);
blocks(XRegExp);
categories(XRegExp);

这段代码在 Node 中工作,并且 Webpack 也可以正确处理以在浏览器中使用。

最新更新