如何解决Angular Search Pipe,支持西里尔文
我需要一些帮助来搜索拉丁文和西里尔文。我在管道中有这段代码。我从反应解决方案中修改了这段代码,无论顺序如何,都可以通过多个单词进行搜索。
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 举报,一经查实,本站将立刻删除。