我将 JavaScript 嵌入到我的 C++ 应用程序中(通过 V8),并且获得了一些想要传递给 JavaScript 的原始二进制数据。现在,在 JavaScript 中,我计划对数据执行一些正则表达式。
当我的数据仅使用标准 JavaScript String
对象时,一切都非常简单。但是,据我了解,它使用 UTF16 表示形式,并期望数据是有效的 Unicode。但我有任意数据(可能包含 '\0'
和其他原始数据 - 尽管它大部分只是文本)。
我应该如何处理这个问题?我搜索了一下,也许 ArrayBuffer 或类似的东西是我需要存储原始数据的对象。但是,我没有找到如何对该对象执行常用的正则表达式方法。 (基本上我需要 RegExp.test
和 RegExp.exec
)。
我刚刚查看了 Node.js 代码,似乎它们支持二进制数据,只需通过 v8::String::NewFromOneByte
将其放入字符串中。请参阅here和 here 。这样就可以回答我的问题(即,我可以只使用 String
),不是吗?有什么缺点吗?
(我仍然不明白为什么我的问题很糟糕。请解释一下否决票。)
最佳答案
从我当前的所有测试来看,它似乎与普通 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);
}
关于javascript - 对原始二进制数据使用正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22063219/