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 (将#修改为@)