Javascript - 根据字典/对象中的键解析字符串

Javascript - Parse string based upon keys in dictionary / object

在我的 React 程序中,假设我有以下字典/对象

const myDict = {
    "a":"Value 1",
    "b":"Value 2",
    "hello":"Value 3",
    "Bye":"Value 4"
}

(请注意,任何键都没有任何其他键中存在的值 - 例如,任何键都不能包含 a 字母,因为那是一个不同的键)

我将收到一个字符串,该字符串 仅包含此对象的键的排列,因此,例如,可能的字符串条目将是:

我希望创建一个函数,根据 myDict 的键将输入字符串分解成其组成部分。

所以,例如,

如何创建这样的函数?我已经尝试过,但我迷失了处理 myDict 的不同长度的密钥,我不知道该怎么做。

在不同键之间交替的正则表达式就可以解决问题。

const myDict = {
    "a":"Value 1",
    "b":"Value 2",
    "hello":"Value 3",
    "Bye":"Value 4"
}
const pattern = new RegExp(
  Object.keys(myDict).join('|'),
  'g'
);
console.log("abhellob".match(pattern));
console.log("ababByeahello".match(pattern));
console.log("ByehelloByeba".match(pattern));

(如果某些键可能有字符重叠,则首先要对键进行排序,以便最长的排在第一位。)

const myDict = {
    "a":"Value 1",
    "b":"Value 2",
    "hello":"Value 3",
    "Bye":"Value 4"
}
const pattern = new RegExp(
  Object.keys(myDict)
    .sort((a, b) => a.length - b.length)
    .join('|'),
  'g'
);
console.log("abhellob".match(pattern));
console.log("ababByeahello".match(pattern));
console.log("ByehelloByeba".match(pattern));

您可以在没有正则表达式的情况下执行此操作:

function getFragments(entryString){
  const myDict = {
"a":"Value 1",
"b":"Value 2",
"hello":"Value 3",
"Bye":"Value 4"
  }
  const keys = Object.keys(myDict);
  
  const result = [];
  let remainingString = entryString;
  while (remainingString) {
const nextWord = keys.find(key => remainingString.startsWith(key));
if (!nextWord) throw new Error("Couldn't match with word");

result.push(nextWord);
remainingString = remainingString.slice(nextWord.length);
  }
  
  return result;
}

console.log(getFragments("abhellob"));
console.log(getFragments("ababByeahello"));
console.log(getFragments("ByehelloByeba"));