Javascript 如何从字符串中生成子字符串关键字或子集?

Javascript 如何从字符串中生成子字符串关键字或子集?,javascript,regex,string,Javascript,Regex,String,我不确定我该怎么称呼它,但我正在尝试从字符串中获取子字符串的集合。我的意思是,假设我有一个字符串,draft question,如果我在函数中传递它,它会返回类似这样的结果 ["", "d", "dr", "dra", "draf", "draft", "draft ", "draft q", "draft qu", "draft que", "draft ques", "draft quest", "draft questi", "draft questio", "draft question

我不确定我该怎么称呼它,但我正在尝试从字符串中获取子字符串的集合。我的意思是,假设我有一个字符串,
draft question
,如果我在函数中传递它,它会返回类似这样的结果

["", "d", "dr", "dra", "draf", "draft", "draft ", "draft q", "draft qu", "draft que", "draft ques", "draft quest", "draft questi", "draft questio", "draft question", "q", "qu", "que", "ques", "quest", "questi", "questio", "question", "question ", "question d", "question dr", "question dra", "question draf", "question draft"]
我写了一个函数,它给了我一些扩展到我想要的东西,但不完全是。你知道我该怎么做吗?可以用正则表达式吗?请注意,它可以是任意数量的单词。像
generateKeywords('put returns between parations')


posted
createKeywords
函数可用于创建长度为1到完整字符串长度的子字符串。posted
generateKeywords
函数是拜占庭式的一般任务,它涉及生成字符串中单词的排列。幸运的是,在这个问题的答案中找到了一个合适的置换函数,所以我从这里开始。因此,
generateKeywords
变得非常简单:

var createKeywords=(名称)=>{
常量arrName=[];
让curName='';
name.split(“”).forEach((字母)=>{
curName+=字母;
arrName.push(curName);
});
返回arrName;
};
函数*排列(a,n=a.length){
如果(n)
{
收集=新集合([''))
for(排列的突变(name.split(“”))
for(createKeywords的子字符串(mutation.join(“”))collect.add(子字符串)
返回[…收集]
};

console.log(generateKeywords('draft question'))
您指定“一个单词”-通常意味着一个单词,但您的字符串是两个单词。如果您现在将其扩展为3个或更多单词,您希望它输出所有单词的每个可能性吗?必须有一个限制,否则您的程序将崩溃。您能详细说明一下您的目标吗?例如,“raft”不是想要的结果吗?而且,“问题草稿”不是“问题草稿”的子串。很抱歉,是的,这将是一个字符串。它可以有几个单词。@subwendukundu在
的情况下会发生什么事情这里有四个单词
?所以这是一种我想用来制作关键字的技术,这将帮助我获取内容。我们现在可以限制到10个。可能吗?
var createKeywords = (name) => {
  const arrName = [];
  let curName = '';
  name.split('').forEach((letter) => {
    curName += letter;
    arrName.push(curName);
  });
  return arrName;
};
var generateKeywords = (names) => {
  const [first, middle, last = '', sfx] = names;
  const suffix = sfx && sfx.length > 0 ? ` ${sfx}.` : '';
  const keywordNameWithoutMiddleName = createKeywords(`${first} ${last}${suffix}`);
  const keywordFullName = createKeywords(`${first} ${middle} ${last}${suffix}`);
  const keywordLastNameFirst = createKeywords(`${last}, ${first} ${middle}${suffix}`);
  const middleInitial = middle.length > 0 ? ` ${middle[0]}.` : '';
  const keywordFullNameMiddleInitial = createKeywords(`${first}${middleInitial} ${last}${suffix}`);
  const keywordLastNameFirstMiddleInitial = createKeywords(`${last}, ${first} ${middleInitial}${suffix}`);
  return [
    ...new Set([
      '',
      ...keywordFullName,
      ...keywordLastNameFirst,
      ...keywordFullNameMiddleInitial,
      ...keywordLastNameFirstMiddleInitial,
      ...keywordNameWithoutMiddleName
    ])
  ];
};