节点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; });
-
find你的外部
$#
语句提到的组。 记住它是哪一个。 -
您需要计算捕获组,这两个组都命名为(
(?P<NAME>)
)和unnamed()
-
([abc])(?:[efg])(?P<NAME>[hij])
-
-
然后,find对命名捕获(
\g<NAME>
)的任何引用,并用\#
replace,其中#
是最后一步的编号。 -
在获取第一步中find的组的新号码后,更改JS代码中的
$#
。
与工作
sudo npm install perl sudo npm install pcre
为了我。 可能绑定/链接系统库需要sudo / root权限。 上面的命令为我做了窍门。
所以如果有其他人需要在通过nvmpipe理的最新节点上安装这些模块,只需像往常一样使用sudo和依赖关系的其余部分来安装这些模块。