我正在修改一个 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?