1 小时前,我问过Transform patterns of code points in a binary的问题:我需要将集合转换为这样[$a-z]
的二进制文件:
01 24 // $
00 // interval between 2 code points
61 00 // a
7a 00 // z
我[$a-z]
从UnicodeSet站点获得了类似的集合。它只需要您输入一个模式并生成一个代码点集。
我已经重写了一些简单但不平凡的 UnicodeSet 到二进制集转换器。现在,我没有阅读真正的代码点,而是\u
通过启用UnicodeSet 站点上的Escape选项来阅读它们的转义形式。我这样做是因为浏览器希望从返回的集合中删除一些字符。
但是,我自己将模式返回的集合的最终输出在[:age=5.0:]&[[:gc=L:][:gc=Nl:][:gc=Mn:][:gc=Mc:][:gc=Nd:][:gc=Pc:]\$_]
我自己将其转换为二进制后看起来有错误的代理项。
我在输入集中读取和跳过单个代码点的功能是nextCodePoint
:
function nextCodePoint()
{
u_ch = input.charCodeAt(inputOffset);
__escaped__ = false;
// Handle escape
if (u_ch === 0x5C)
{
__escaped__ = true;
u_ch = input.charCodeAt(inputOffset + 1);
// Handle \u
if (u_ch === 0x75)
{
inputOffset += 2;
// Skip the left XXXX base
u_start = inputOffset;
inputOffset += 4;
// Skip the right XXXX base (limited for messy patterns)
if (input.charCodeAt(inputOffset) !== 0x5C)
inputOffset += 4;
return parseInt(input.slice(u_start, inputOffset), 16);
}
}
++inputOffset;
return u_ch;
}
有任何想法吗?