Node JS PCRE 正则表达式和转换支持

Node JS PCRE regex and transforms support

我需要应用大量具有多个反向引用的 PCRE 正则表达式,并在 Node JS 应用程序中应用 perl 样式 t运行sforms s/\/\/(\d+)//s

我四处搜索并找到了这两个用于此目的的库:

https://github.com/mscdex/node-pcre(正则表达式应用程序)

https://github.com/tokuhirom/node-perl(Perl 风格 t运行sforms)

我在 Node v5.9.0 中安装这些模块时遇到了很多 NPM 错误。

node-pcre 库有一个 issue 表示由于 V8 中的更改,库在 NodeJS 0.10 版本后停止工作 API

我 运行 也遇到了 node-perl 库的安装问题。

有没有办法让我在 Node v5.9.0

中获得对 PCRE 正则表达式和 t运行sforms 的支持

谢谢

编辑:下面的评论之一是指定一个正在尝试的 PCRE 正则表达式,它在 javascript 中不起作用。这是示例:

var fs = require("fs");

var regex = '<input type=\"hidden\"\s*name=\"itemId\"\s*value=\"(?P<sku>[\w\-]+)\"[^<]*>.*?<SCRIPT LANGUAGE=\'JavaScript\'[^<]*>.*?(\g{sku}Matrix\s*\=.*?<\/SCRIPT>)';
var page = fs.readFileSync("./page.html");

var re = new RegExp(regex);
var matchStr = "";

matchStr = page.replace(re, function (match, ) { return ; });
console.log(matchStr);

回应

SyntaxError: Invalid regular expression: /<input type="hidden"s*name="itemId"s*value="(?P<sku>[w-]+)"[^<]*>.*?<SCRIPT LANGUAGE='JavaScript'[^<]*>.*?(g{sku}Matrixs*=.*?</SCRIPT>)/: Invalid group
    at new RegExp (native)
    at Object.<anonymous> (/home/user/project/abc.js:7:10)
    at Module._compile (module.js:413:34)
    at Object.Module._extensions..js (module.js:422:10)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)
    at Function.Module.runMain (module.js:447:10)
    at startup (node.js:142:18)
    at node.js:939:3

在您提供的正则表达式中,您使用的是 JS 不支持的命名组。因此,在这种情况下,您需要使用编号组,将您想要的捕获推送到 </code>。</p> <p><code><input type=\"hidden\"\s*name=\"itemId\"\s*value=\"([\w\-]+)\"[^<]*>.*?<SCRIPT LANGUAGE=\'JavaScript\'[^<]*>.*?(Matrix\s*\=.*?<\/SCRIPT>)';

它应该像这样工作:

matchStr = page.replace(re, function (match, ) { return ; });
  1. 找到您的外部 $# 声明中提到的组。记住是哪一个了

  2. 您需要计算捕获组,包括命名 ((?P<NAME>)) 和未命名 ()

    • ([abc])(?:[efg])(?P<NAME>[hij])记住,这里[abc]是1,[hij]是2,因为(?:)是非捕获。
  3. 然后,找到对命名捕获 (\g<NAME>) 的任何引用并替换为 \#,其中 # 是最后一步的编号。

  4. 获取第一步找到的组的新号码后,更改 JS 代码中的 $#s。

曾与

合作
sudo npm install perl
sudo npm install pcre

对我来说。可能 binding/linking 系统库需要 sudo/root 权限。 上面的命令对我有用。

因此,如果其他人需要在通过 nvm 管理的最新节点上安装这些模块,只需像往常一样使用 sudo 和其余依赖项安装这些模块而无需 sudo。