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