问题描述
我需要一些帮助来搜索拉丁文和西里尔文。我在管道中有这段代码。我从反应解决方案中修改了这段代码,无论顺序如何,都可以通过多个单词进行搜索。
else 语句中的拉丁文部分效果很好。我有西里尔文的问题。基本上我正在尝试检测西里尔字母,在我击中空格之前条件很好。出于某种原因,当我点击空格时,条件无效,并将其视为拉丁语。
这是我的主要问题。 const hasTrailingSpace = searchText.endsWith(" ");
这是代码检查尾随空格的地方,当我点击空格时,它甚至不会进入西里尔文条件,更不用说尾随空格的内部条件了。
searchText = searchText.toLocaleLowerCase();
const cyrilic = /^\p{Script=Cyrillic}+$/u;
if (cyrilic.test(searchText)) {
function escapeRegExp(s) {
return s.replace(/[-/\\^$*+?.()|[\]{}]/gu,"\\$&");
}
const words = searchText
.split(/\s+/gu)
.map(s => s.trim())
.filter(s => !!s);
const hasTrailingSpace = searchText.endsWith(" ");
const searchRegex = new RegExp(
words
.map((word,i) => {
if (i + 1 === words.length && !hasTrailingSpace) {
return `(?<![\u0400-\u04ff])${escapeRegExp(word)}(?![\u0400-\u04ff])`;
} else {
return `(?<!\\S)${escapeRegExp(word)}(?!\\S)`;
}
})
.join("") + ".+","giu"
);
return items.filter(item => {
return searchRegex.test(item.title.toLocaleLowerCase());
});
} else {
function escapeRegExp(s) {
return s.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&");
}
const words = searchText
.split(/\s+/g)
.map(s => s.trim())
.filter(s => !!s);
const hasTrailingSpace = searchText.endsWith(" ");
const searchRegex = new RegExp(
words
.map((word,i) => {
if (i + 1 === words.length && !hasTrailingSpace) {
return `(?=.*\\b${escapeRegExp(word)})`;
} else {
return `(?=.*\\b${escapeRegExp(word)}\\b)`;
}
})
.join("") + ".+","gi"
);
return items.filter(item => {
return searchRegex.test(item.title.toLocaleLowerCase());
});
}
任何帮助都会很棒。谢谢...
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)