【发布时间】:2016-04-18 17:24:17
【问题描述】:
我需要应用大量具有多个反向引用的 PCRE 正则表达式,并在 Node JS 应用程序中应用 perl 样式转换 s/\/\/(\d+)/$1/s。
为此目的,我四处搜索并找到了这两个库:
https://github.com/mscdex/node-pcre(正则表达式应用)
https://github.com/tokuhirom/node-perl(Perl 样式转换)
在 Node v5.9.0 中安装这些模块时,我遇到了很多 NPM 错误。
node-pcre 库有一个 issue,表示由于 V8 API 的变化,该库在 NodeJS 0.10 版本之后停止工作
我也遇到了 node-perl 库的安装问题。
有没有办法让我在 Node v5.9.0 中获得对 PCRE 正则表达式和转换的支持
谢谢
编辑:下面的 cmets 之一是指定一个正在尝试的 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, $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
【问题讨论】:
-
为什么 Javascript 正则表达式不够用?
-
之前的正则表达式都是用PCRE编写的。我需要在我的应用中使用它们
-
除非这些正则表达式使用特殊的 PCRE 功能,它们中的大多数应该直接与 Javascript 正则表达式引擎一起使用,而其他的则只需少量更改。
-
@alpha_cod:你能分享一下正则表达式吗?
-
示例正则表达式:name=\"itemId\"\svalue=\"(?P
[\ w\-]+)\"[^.*?) 使用此 PCRE 功能:regular-expressions.info/named.html
标签: regex node.js npm pcre npm-install