在原始二进制数据上使用regexp

时间:2014-02-27 08:43:26

标签: javascript regex binary-data

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

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

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


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

(我仍然不明白为什么我的问题很糟糕。请解释一下downvote。)

1 个答案:

答案 0 :(得分:0)

从我目前的所有测试中,看起来它与普通String一样正常。

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

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

并且该字符串上的正则表达式与预期的一样。

在C ++方面,如果要将二进制数据转换为JS String对象:

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);
}