c++ - NAPI:如何匹配来自 C++ 线程的 JS 正则表达式?
问题描述
我正在修改一个 Node 本机扩展,它产生本机线程来进行一些处理。我的问题是我想让 Javascript 代码为处理提供一个过滤器以排除一些数据。
在这一点上,我将一个 JS RegExp 字符串从 JS 传递到 C++,std::regex
从中创建一个实例,并将它传递给不同的结构,向下传递到本机线程逻辑。
我现在的问题是,尽管std::regex
使用的语法似乎与 ECMAScript 正则表达式相同,但行为并不相同 :(
我最初的计划是以某种方式依赖 V8 的 RegExp 引擎,但直接触发 C++ 位,而不是从 C++ 到 JS 再返回。但我无法找到如何做到这一点。
例如,请参阅以下程序使用相同的正则表达式但产生不同的结果:
#include <stdio.h>
#include <regex>
int main() {
std::regex re("^(?:(?:(?!(?:\\/|^)\\.).)*?\\/c)$");
std::smatch match;
std::string input("a.b/c");
int result = std::regex_match(input, match, re);
if (result == 1) {
printf("ok");
} else {
printf("nok");
}
return 0;
}
等效的JS代码:
const re = new RegExp("^(?:(?:(?!(?:\\/|^)\\.).)*?\\/c)$");
const match = re.exec("a.b/c");
if (match) {
console.log("ok");
} else {
console.log("nok");
}
那么我的问题是:我能做些什么来获得与 JS 但在 C++ 中相同的结果?是否可以从纯 C++ 上下文运行 V8 的 RegExp?
解决方案
推荐阅读
- nativescript - Nativescript 6 - 点击事件未在子元素上触发
- css - Vuejs:CSS被加载在头部而不是shadow-root
- google-apps-script - 在电子表格中手动添加列时,列索引是否会更改
- r - graphicspath 导致 rmarkdown 编译失败
- android - android中不同颜色的内存和CPU使用率
- c - 加载 UEFI 协议的正确方法是什么?
- json - 仅当特定密钥对值与可迭代匹配时,才在 JSON 对象中获取多个 JSON 密钥对值
- libp2p - 关于在 libp2p 主机中启动新流的一些问题
- r - 如何在一张图中按两个不同的组制作多个箱线图?
- ruby - Selenium Chrome,“点击”操作需要无限时间才能完成