如何使用纯javascript对一组字母进行排序,就像我在下面写的那样。 你使用.match [a-zA-Z]吗? 或拆分?或者是其他东西 ?? 例如:
sortGroupsOfLetters('x5*RnEM*BLL8nX@3');
// Result should be something like: BLL5*RnEM*nX8x@3
// Only the letters should be randomly sorted
这是我到目前为止所拥有的。它不断吐出随机字母而没有像“ RnEM BLLxnX @”这样的数字
function randomsort(a, b) {
return Math.random()>.5 ? -1 : 1;
}
var arrStr = 'x5*RnEM*BLL8nX@3';
var res = arrStr.split(/[0-9]/gi).sort(randomsort,/[0-9]/gi);
var randomStr = arrStr.split(/[0-9]/gi).sort(randomsort,/[0-9]/gi);
console.log(randomStr.join('')); // returns something like *RnEM*BLLxnX@"
我还创建了一个函数,用于保存数字和符号,并用字符串中的第一个字母替换字母(x5 * xxxx * xxx8xx @ 3)。
function myFunction() {
var arrStr = "x5*RnEM*BLL8nX@3";
var letters = arrStr.split(/[0-9]/gi).sort(randomsort,/[0-9]/gi);
var res = arrStr.replace(/[a-z]/gi, letters[0]);
document.getElementById("demo").innerHTML = res //displays something like x5*xxxx*xxx8xx@3
}
答案 0 :(得分:1)
我确定还有其他(更好)的方法,但这是一个解决方案。
首先,将字母组和非字母组分成两个不同的数组。然后你以任何你想要的方式洗牌。然后,将重新组合的字母组数组与其他数组重新组合。
在下面的示例中,我使用String#match
创建两个数组,将其中一个,然后Array#map
和Array#join
重新组合在一起。
let str = 'x5*RnEM*BLL8nX@3'
// Get an array of letter groups
let a = str.match(/[a-z]+/gi)
// Get array of everything else in the string
let b = str.match(/[^a-z]+/gi)
// Shuffle the letter groups randomly
var j, x, i;
for (i = a.length - 1; i > 0; i--) {
j = Math.floor(Math.random() * (i + 1));
x = a[i];
a[i] = a[j];
a[j] = x;
}
// Recombine the two arrays
let newstr = a.map((s,i)=>{return s + (b[i] || "")}).join("")
console.log(newstr)