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?

iCMS 回答:NAPI:如何从C ++线程中匹配JS正则表达式?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/1921707.html

大家都在问