节点JS PCRE正则expression式和转换支持

我需要应用大量的带有多个反向引用的PCRE正则expression式,并在Node JS应用程序中应用perl样式转换s/\/\/(\d+)/$1/s

我search了一下,find了这两个库:

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

https://github.com/tokuhirom/node-perl(Perl风格转换)

在Node v5.9.0中安装这些模块期间,我收到了很多NPM错误。

node-pcre库存在一个问题 ,即由于V8 API的更改,库在NodeJS 0.10版本之后停止工作

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

有没有一种方法可以获得对Node v5.9.0中PCRE正则expression式和转换的支持

谢谢

编辑:下面的意见之一是指定一个PCRE正则expression式,正在尝试哪些不能在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, $1) { return $1; }); 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 

在你给的正则expression式中,你使用了JS不支持的命名组。 因此,在这种情况下,您需要使用编号组,这会将所需的捕获量推到$2

<input type=\"hidden\"\s*name=\"itemId\"\s*value=\"([\w\-]+)\"[^<]*>.*?<SCRIPT LANGUAGE=\'JavaScript\'[^<]*>.*?(\1Matrix\s*\=.*?<\/SCRIPT>)';

它应该像这样工作:

 matchStr = page.replace(re, function (match, $2) { return $2; }); 
  1. find你的外部$#语句提到的组。 记住它是哪一个。

  2. 您需要计算捕获组,这两个组都命名为( (?P<NAME>) )和unnamed ()

    • ([abc])(?:[efg])(?P<NAME>[hij])
  3. 然后,find对命名捕获( \g<NAME> )的任何引用,并用\#replace,其中#是最后一步的编号。

  4. 在获取第一步中find的组的新号码后,更改JS代码中的$#

与工作

 sudo npm install perl sudo npm install pcre 

为了我。 可能绑定/链接系统库需要sudo / root权限。 上面的命令为我做了窍门。

所以如果有其他人需要在通过nvmpipe理的最新节点上安装这些模块,只需像往常一样使用sudo和依赖关系的其余部分来安装这些模块。