You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript实现阿拉伯相似字母的搜索匹配优化?

解决阿拉伯语形似字母的模糊搜索问题

核心问题是你之前的单向替换只会把输入字符转成单一标准字符,导致只能匹配被替换后的结果,而无法覆盖同组的其他形似字母。正确的思路是把输入字符扩展为包含同组所有字符的正则字符集,这样就能同时匹配组内所有形似字母。

步骤1:定义形似字母分组

先把所有需要匹配的形似字母按组归类,确保组内任意一个字符都能映射到整个组:

// 阿拉伯语形似字母分组,键是可能的输入字符,值是该组所有需匹配的字符
const arabicCharGroups = new Map([
  ['ا', ['ا', 'أ', 'إ']],
  ['أ', ['ا', 'أ', 'إ']],
  ['إ', ['ا', 'أ', 'إ']],
  ['ي', ['ي', 'ى']],
  ['ى', ['ي', 'ى']],
  ['ه', ['ه', 'ة']],
  ['ة', ['ه', 'ة']]
]);

步骤2:构建支持形似匹配的正则

写一个函数,把输入的搜索词转换成包含字符集的正则表达式,这样每个组内的字符都会被替换成[字符1字符2]的形式,实现同时匹配:

function buildArabicSearchRegex(searchTerm) {
  let regexPattern = '';
  for (const char of searchTerm) {
    const group = arabicCharGroups.get(char);
    if (group) {
      // 转义正则特殊字符(阿拉伯字母一般无特殊字符,做兼容处理)
      const escapedGroup = group.map(c => c.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('');
      regexPattern += `[${escapedGroup}]`;
    } else {
      // 非组内字符直接转义后加入
      regexPattern += char.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
    }
  }
  // 返回不区分大小写的正则(阿拉伯语大小写差异小,可根据需求调整)
  return new RegExp(regexPattern, 'i');
}

步骤3:使用正则过滤产品数据

假设你已经从API获取了产品列表,直接用生成的正则匹配即可:

// 示例产品数据
const products = [
  { name: 'هندسة برمجة' },
  { name: 'مدرسة هندسة' },
  { name: 'خدمة تصميم' },
  { name: 'خدمة تطوير' },
  // 更多产品...
];

// 输入搜索词"ه",生成匹配ه和ة的正则
const searchRegex = buildArabicSearchRegex('ه');
// 过滤所有包含组内字符的产品
const matchedProducts = products.filter(item => searchRegex.test(item.name));

console.log(matchedProducts); // 会返回所有含ه或ة的产品

后端API适配(如果需要)

如果是需要把搜索条件传给后端查询数据库,你可以把生成的正则字符串传给后端,让后端用对应的数据库正则语法执行查询:

  • MySQL:使用REGEXP或RLIKE关键字,比如WHERE name REGEXP '[هة]'
  • MongoDB:使用$regex操作符,比如{ name: { $regex: '[هة]' } }

内容的提问来源于stack exchange,提问作者3làá 3dêl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 14:22:13