javascript:区分数组映射中的键

javascript: differentiate keys in array maps

我写了一个小脚本来将拉丁语音译成不同的脚本。一些字符用两个字母在拉丁文中音译。例如(见代码)g 和 j 变为 gj (\u{1050B})。但是,当输入“gj”时脚本并没有输出gj,而是分别输出gj\u{1050A}\u{1050E})。如何区分不同的键?

function transliterate(word){
  var l = {
    /*...*/'g':'\u{1050A}','gj':'\u{1050B}','h':'\u{1050C}','i':'\u{1050D}','j':'\u{1050E}'/*...*/
  };
  return word.split('').map(function (char) { 
    return l[char] || char; 
  }).join('');
}

先把有多个字符的键放在前面,然后用正则表达式匹配任意一个键,从第一个开始,而不是按''分割。

function transliterate(word) {
    const charCodes = {
      gj: '\u{1050B}',
      g: '\u{1050A}',
      h: '\u{1050C}',
      i: '\u{1050D}',
      j: '\u{1050E}'
    };
    const pattern = new RegExp(
      Object.keys(charCodes).join('|'),
      'g'
    );
    return word.replace(pattern, match => charCodes[match]);
  }
  console.log(transliterate('gjj'));