我試圖獲得沒有特殊字符的所有組合。例如:
句子:te"st! bat(t) 我想要這個詞的陣列:
測驗!
測驗!
測驗
測驗
蝙蝠(噸)
蝙蝠(噸
蝙蝠)
蝙蝠
我用這個代碼試過了:
function dicSearch(q) {
q = q.replace(/[.* ?^${}()|[\]\\]/g, '\\$&');
let arr = q.split(" ");
let chars = ['"', '!', '(', ')'];
let res = [];
for (let i = 0; i < arr.length; i ) {
for (let j = 0; j < chars.length; j ) {
if (arr[i].indexOf(chars[j]) > -1) {
res.push(arr[i].replace(new RegExp("\\" chars[j], "gi"), ''));
}
}
res.push(arr[i]);
}
return res;
}
但我不知道如何采用所有組合,現在按特殊字符陣列的順序進行
tnx
uj5u.com熱心網友回復:
分步驟:
- 查找所有特殊字符
- 查找已找到字符的 powerset
- 替換來自 powerset 的所有子集的字符
const dicSearch = (testString) => {
const specialCharsRegex = /[!@#$%^&*()_ \-=\[\]{};':"\\|,.<>\/?] /gi;
const matches = [...testString.matchAll(specialCharsRegex)].map(match => match[0]);
const powerSet = getPowerSet(matches);
return replaceFromPowerSet(testString, powerSet);
};
const getPowerSet = (array) => {
return new Array(1 << array.length).fill(null).map((e1, i) => array.filter((e2, j) => i & 1 << j));
};
const replaceFromPowerSet = (testString, powerSets) => {
const stringArray = [];
powerSets.map(singleSet => {
let tmpString = testString;
if (singleSet.length === 0) {
// If you don't want original string remove this push and leave return
stringArray.push(tmpString);
return;
}
singleSet.map(char => tmpString = tmpString.replace(char[0], ''));
stringArray.push(tmpString);
});
return stringArray;
};
dicSearch('te"st!').map(permutation => console.log(permutation));
console.log('-------');
dicSearch('bat(t)').map(permutation => console.log(permutation));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/363662.html
標籤:javascript 细绳 组合
上一篇:字典理解我如何得到一個鍵的值除以相同鍵但在不同字典中的值
下一篇:斷言表中某行的值
