搜索带重音符号的阿拉伯语单词 marks/diacritics

Search Arabic word with accent marks/diacritics

我有一个 JSON file,其中包含带有重音符号/变音符号的阿拉伯语单词,

我正在尝试使用不带标记的普通阿拉伯语单词进行搜索,然后用重音符号突出显示搜索到的单词

EX: User search with 'صلوات' without any accent will return "صَّلَوَاتِ" so I can highlight it

عَلَى أَنْ تَعْبُدُوا اللَّهَ وَلَا تُشْرِكُوا بِهِ شَيْئًا، وَالصَّلَوَاتِ الْخَمْسِ، وَأَسَرَّ كَلِمَةً خَفِيَّةً أَنْ لَا تَسْأَلُوا النَّاسَ شَيْئًا

will get

عَلَى أَنْ تَعْبُدُوا اللَّهَ وَلَا تُشْرِكُوا بِهِ شَيْئًا، وَالصَّلَوَاتِ الْخَمْسِ، وَأَسَرَّ كَلِمَةً خَفِيَّةً أَنْ لَا تَسْأَلُوا النَّاسَ شَيْئًا


textformfield 上使用的搜索方法

List<Hades> hadesList = [];            \json file list 
List<Hades> searchHadesList = [];      

Future<void> searchHadesText(String text) {
    searchHadesList = hadesList
        .where((element) => RemoveExtinctionsAtWord()
            .normalise(element.hades)
            .contains(RemoveExtinctionsAtWord().normalise(text)))
        .toList();
  }

在这段代码中,我必须从搜索文本和 JSON 文件中删除变音符号,以便在它们之间进行比较

您可以在每个字符后添加可选的变音符号模式:

var output = text.replaceAllMapped(RegExp(word.split("").join("\p{M}*"), caseSensitive: false, unicode: true), (Match m) => "<span>${m[0]}</span>")

备注:

  • \p{M} - 匹配任何变音符号
  • unicode: true 允许使用 Unicode 属性 类 就像模式 \p{M}
  • .replaceAllMapped 是必需的,因为匹配值应该用于替换