1

我需要为前缀搜索获取尽可能高的 UTF8 字符。

我有一个这样的数据集:

A
Ba
Bf
C

现在我可以通过指定开始值和结束值来进行前缀搜索:

Start: B
End: B* where * should be the highest possible UTF8 character.

如何使用 Javascript 以编程方式获取此信息?

编辑:这是一个更好的例子:

我需要将此前缀发送到 JSON RPC API。所以我无法在 JS 中进行实际比较。

但是,如果我想同时处理以 B 开头的两个字符串,我会发送

Start: B 
End: B? 

在哪里 ?是最大可能的 UTF8 字符。

如果是 ASCII,我可以这样做"B" + String.fromCharCode(255),但这仅适用于 ASCII。我的字符串是 UTF8 格式,在这种情况下,它不会匹配以 B 开头的所有可能的字符串。

4

5 回答 5

3

根据您的代码,您可能不需要实际的最高 UTF8 代码点。

if ((input >= 'B') && (input < 'C')) { ... }

可以为您解决问题。

于 2012-06-26T09:56:14.650 回答
2
const maximumCodePoint = String.fromCodePoint(0x10ffff)

> String.fromCodePoint(0x10ffff + 1)
RangeError: Invalid code point 1114112
于 2017-04-11T18:36:16.740 回答
0

您可以使用>比较运算符在 JavaScript 中对字符串开头进行 UTF 代码点比较。所以你可以使用

search >= "B" && search < "C"

, 但一个简单的

search.test(/^B.*/)

或者

search.charAt(0) == "B"

也应该这样做。

于 2012-06-26T10:03:51.423 回答
0

在我看来你想要:

var datas = [
    'A',
    'Bf',
    'Ba',
    'C'
];

// Create an array with char codes prefixed with "B" but it returns
// for the second string. For example, for B*, it returns the char code of *.
var datasB = datas.map( function( data ) {
    if ( data.charAt( 0 ) === 'B' ) {
        return data.substr( 1 ).charCodeAt( 0 );
    }
} ).filter( Boolean );
// The `filter( Boolean )` removes the falsy values (undefined)

// This technique is very efficient to get the maximum value of an array
var max = Math.max.apply( Math, datasB );

John Resig对获取数组最大值的技术的启发。

于 2012-06-26T10:17:25.077 回答
0

如果你想创建一个范围,你可以使用\uffff.

MyRange("foo", "foo\uffff")

将找到以 . 开头的所有内容foo

于 2012-07-18T23:38:04.460 回答