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 ; });
找到您的外部 $#
声明中提到的组。记住是哪一个了
您需要计算捕获组,包括命名 ((?P<NAME>)
) 和未命名 ()
([abc])(?:[efg])(?P<NAME>[hij])
记住,这里[abc]
是1,[hij]
是2,因为(?:)
是非捕获。
然后,找到对命名捕获 (\g<NAME>
) 的任何引用并替换为 \#
,其中 #
是最后一步的编号。
获取第一步找到的组的新号码后,更改 JS 代码中的 $#
s。
曾与
合作
sudo npm install perl
sudo npm install pcre
对我来说。可能 binding/linking 系统库需要 sudo/root 权限。
上面的命令对我有用。
因此,如果其他人需要在通过 nvm 管理的最新节点上安装这些模块,只需像往常一样使用 sudo 和其余依赖项安装这些模块而无需 sudo。
我需要应用大量具有多个反向引用的 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 ; });
找到您的外部
$#
声明中提到的组。记住是哪一个了您需要计算捕获组,包括命名 (
(?P<NAME>)
) 和未命名()
([abc])(?:[efg])(?P<NAME>[hij])
记住,这里[abc]
是1,[hij]
是2,因为(?:)
是非捕获。
然后,找到对命名捕获 (
\g<NAME>
) 的任何引用并替换为\#
,其中#
是最后一步的编号。获取第一步找到的组的新号码后,更改 JS 代码中的
$#
s。
曾与
合作sudo npm install perl
sudo npm install pcre
对我来说。可能 binding/linking 系统库需要 sudo/root 权限。 上面的命令对我有用。
因此,如果其他人需要在通过 nvm 管理的最新节点上安装这些模块,只需像往常一样使用 sudo 和其余依赖项安装这些模块而无需 sudo。