我的应用程序中有一个SearchBar,从该SearchBar的输入开始提供建议。

例如:在SearchBar中键入skrillex将产生以下建议:

skrillex
skrillex kyoto
skrillex cinema
skrillex bangarang
skrillex live

我正在尝试将建议中与SearchBar输入匹配的单词加粗

对于上面的相同示例,结果将是:
<b>skrillex</b>
<b>skrillex</b> kyoto
<b>skrillex</b> cinema
<b>skrillex</b> bangarang
<b>skrillex</b> live

我当前使用的代码如下:
item.startsWith(this.state.searchText.trim()) ?
                        [<Text style={{ fontWeight: "bold" }}>{this.state.searchText.replace(/\s\s+/g, ' ')}</Text>,
                        <Text>{item.slice((this.state.searchText.replace(/\s\s+/g, ' ').length)).replace(/\s\s+/g, ' ')}</Text>]
                        : (<Text>{item}</Text>)

这适用于大多数情况,但是在某些极端情况下,上面的代码错误地输出了建议。例如,键入skrillex.(点后有空格)将输出以下建议:
skrillex. cinema
skrillex.bangarang
skrillex. live
skrillex. songs
skrillex.com

从上面运行我的代码以加粗匹配的单词后,这是输出:
<b>skrillex.</b> cinema
<b>skrillex.</b>angarang
<b>skrillex.</b> live
<b>skrillex.</b> songs
<b>skrillex.</b>om

基本上,.slice已从b(bangarang)中剪切了skrillex.bangarang,并从c(com)中剪切了skrillex.com

谁能发现错误所在?我也乐于接受任何其他替代方法,因为我认为我的效率不高。

最佳答案

您的代码中的问题是以下表达式:/\s\s+/g, ' '。您正在用空格替换空格。

如果您在Chrome控制台:'skrillex. '.replace(/\s\s+/g, ' ').length上尝试此操作,则会看到长度为10,对于skrillex.com和skrillex.bangarang,位于第10位的字符分别为 o 以及

关于javascript - 无法正确 trim 和删除两个字符串中匹配的单词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56486443/

10-09 17:19