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

标签 regex node.js npm pcre npm-install

我需要在 Node JS 应用程序中应用大量具有多个反向引用的 PCRE 正则表达式,并应用 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 正则表达式和转换的支持

谢谢

编辑:下面的评论之一是指定正在尝试的 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

最佳答案

在您提供的正则表达式中,您使用的是 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. 查找外部提及的群组 $#陈述。记住它是哪一个。

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

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

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

关于regex - Node JS PCRE 正则表达式和转换支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36644248/

相关文章:

java - 正则表达式:仅匹配字符串中不相同的字符

javascript - 如何使用 node.js 获取系统统计信息

npm - Gulp-compass : Error: Cannot load such file --susy 中的 Susy 和断点

node.js - 从 npm 而不是工作区安装 yarn 包

javascript - 如何使用正则表达式比较单词但忽略某些单词?

Java RegEx - 如何防止一行特殊字符被另一个字符替换?

javascript - 使用 Axios 的 Amazon S3 远程文件上传

javascript - 忽略 Room 中的 Slack 编辑,但不直接对机器人进行编辑

npm - 已安装 JSON 服务器但显示消息未找到命令

regex - 双引号括号内的字符串