Javascript - 获取字符串的所有唯一排列(特殊情况)

Javascript - Get all unique permutations of a string (special case)

给定一个字符串,如“这是一个带空格的搜索”,我想 return 该字符串的所有排列,其中空格被破折号替换。例如,这是我想要的结果:

["这是一个带空格的搜索"]
["this-is-a-search-with", "spaces"]
["this", "is-a-search-with-spaces"]
["this-is", "a-search-with-spaces"]
[“这是一个搜索”,“带空格”]
["this-is-a", "search-with-spaces"]
...等等。

我可以做一半,但问题是它匹配 ["query1-query2", "query3"] 但不匹配 ["query1", "query2-query3"]。

这是我当前的代码:

const sliced = query.split(/ +/g)
let permutations = []
for (let i = 1; i <= sliced.length; i++) {
  let permuteArr = []
  for (let j = 0; j < sliced.length; j+=i) {
    permuteArr.push(sliced.slice(j, j+i).join("-"))
  }
  permutations.push(permuteArr)
}

谢谢你的帮助。

这是一个产生组合的递归生成器:

function permutations(query) {
    
    function* iterRecur(sliced) {
        if (sliced.length == 1) return yield sliced;
        for (const result of iterRecur(sliced.slice(1))) {
            yield [sliced[0] + "-" + result[0], ...result.slice(1)];
            yield [sliced[0], ...result];
        }
    }

    const sliced = query.split(/ +/g);
    return [...iterRecur(sliced)];
}

console.log(permutations("this is a test"));