【问题标题】:using regexp on raw binary data对原始二进制数据使用正则表达式
【发布时间】:2014-02-27 08:43:26
【问题描述】:

我在我的 C++ 应用程序中嵌入了 JavaScript(通过 V8),我得到了一些想要传递给 JavaScript 的原始二进制数据。现在,在 JavaScript 中,我打算对数据做一些正则表达式。

当我的数据只使用标准 JavaScript String 对象时,一切都非常简单。但是,据我了解,它使用 UTF16 表示并期望数据是有效的 Unicode。但我有任意数据(可能包含 '\0' 和其他原始数据 - 尽管大部分只是文本)。

我应该如何处理?我搜索了一下,也许ArrayBuffer 或类似的东西是我需要存储我的原始数据的对象。但是,我没有找到如何对该对象执行通常的正则表达式方法。 (基本上我需要RegExp.testRegExp.exec)。


我刚刚检查了 Node.js 代码,它们似乎支持二进制数据,只是通过v8::String::NewFromOneByte 将其放入字符串中。请参阅 herehere。这样就可以回答我的问题(即我可以使用String),不是吗?有什么缺点吗?

(我仍然不明白为什么我的问题不好。请解释否决票。)

【问题讨论】:

  • 所以你想对二进制数据进行正则表达式搜索?
  • @jfriend00:是的。我不确定到底用什么 JavaScript 对象来保存二进制数据,也不确定我是否可以在上面使用标准的 JS 正则表达式。我基本上是在征求意见,如何处理这些要求。我是 JavaScript 新手。
  • 谁投了反对票,你能就如何让我的问题更清楚提出建议吗?我不确定有什么不清楚的地方。
  • Javascript 的设计目的不是为了做你想做的事。 Javascript 对字符串进行正则表达式搜索。字符串是 UTF-8 编码的,而不是纯二进制数据。我不知道如果您将二进制数据放入字符串并尝试它会发生什么。你必须看看会发生什么,并且可能需要在多个浏览器中进行测试才能知道你是安全的,并且它会按照你的意愿去做。
  • Albert - 您可以提交自己的答案然后接受。当您发现自己的答案时,这是正确的程序。

标签: javascript regex binary-data


【解决方案1】:

从我目前的所有测试来看,它似乎与正常的String 一样正常工作。

您甚至可以直接在 JavaScript 中指定,例如

var s = "\x00\x01\x02\x03"

该字符串上的正则表达式按预期工作。

在 C++ 方面,如果您想将二进制数据转换为 JS 字符串对象:

v8::Local<v8::String> jsBinary(const uint8_t* data, uint32_t len) {
    assert(int(len) >= 0);
    return String::NewFromOneByte(v8::Isolate::GetCurrent(), data, String::kNormalString, len);
}

【讨论】:

    猜你喜欢
    • 2011-11-12
    • 2018-11-24
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 2011-08-02
    • 2021-06-04
    • 2012-04-19
    相关资源
    最近更新 更多