在javascript中混淆了字符串的中间

Mixing up the middle of strings in javascript

本文关键字:字符串 中间 javascript      更新时间:2023-09-26

我正在寻找一种有说服力的方法来混合字符串中单词的中间字符,如"这是一个示例字符串"变成"这是一个示例字符串"。我想首先把单词分成一个数组,选择长度大于两个字符的单词,将第一部分的第一个和最后一个字母分开,但我想不出一个好的方法来打乱它们。

编辑更好的答案。

这里有一个快速而肮脏的方法。您可以使用正则表达式查找长度至少为3个字符的所有字符串,并取出第一个字符、最后一个字符和中间字符。然后,您只需拆分中间字符的数组,随机排序并将它们重新连接在一起,将第一个和最后一个字符粘在一起。

myStr.replace(/'b([a-z])([a-z]+)([a-z])'b/ig, function(str, first, middle, last) {
    return first +
           middle.split('').sort(function(){return Math.random()-0.5}).join('') + 
           last;
});
function middleMix(s){
    var A= s.split(''), c1= A.shift(), c3= A.pop() || '';
    while(A.length) c1+= A.splice(Math.floor(Math.random()*A.length), 1);
    return c1+c3;
}

该方法将字符串分割成一个字符数组,去掉第一个字符并弹出最后一个字符。

中间部分(如果有的话)然后拼接,每次一个随机字符,并添加到前缀中。

最后添加后缀返回。

//编辑-多字

function middleMix(str){
    var s= str.split(' ');
    for(var i= 0; i<s.length;i++){
        var A= s[i].split(''), c1= A.shift(), c3= A.pop() || '';
        while(A.length) c1+= A.splice(Math.floor(Math.random()*A.length), 1);
        s[i]= c1+c3;
    }
    return s.join(' ');
}
middleMix("this is an example string")
/*  returned value: (String)
tihs is an exmlpae sitrng
*/

编写一个函数,该函数接受一个数组,并将索引i和j之间的所有内容进行洗牌。

现在从字符串中识别所有单词的开始和结束索引对。

为所有对调用洗牌函数

下面是一些代码:

var str = 'this is an example string.';
var arr = str.split(/'b/g);
var i, j;
for(i = 0; i < arr.length; i++){
    if(/^'w{4,}$/.test(arr[i])){
        var temp = [];
        var end = arr[i].length - 1;
        for(j = 1; j < end; j++)
            temp.push(arr[i][j]);
        arr[i] = arr[i][0] + shuffle(temp).join('') + arr[i][end];
    }
}
str = arr.join('');
document.write(str);
function shuffle(o){
    for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
    return o;
};

从这里获取的Shuffle函数:http://snippets.dzone.com/posts/show/849

给你:http://jsfiddle.net/66LXx/

这段代码做到了,嗯,是的,正如你所说,我已经考虑过在if条件下找出字符串长度,但它必须大于3而不大于2。

<script type="text/javascript">
 var myString = "hello world" ;         ' some value
 var mySplitResult = myString.split(" ");   ' now split it with space seperator
 var a = mySplitResult.Length();           ' get the lenth of splitted array in a
 var i ;
 var temp;
 var result_string;
 result_string= ""; 
 for(i=0;i<a;i++)
 {
   var k = mysplitResult[i].length();  ' now get the length of each string of array 
   if ( k > 3 )                        ' greater than 3 then enter if block
   {
      mySplitResult = mySplitResult.Reverse()  ' just used reverse function
      temp = mySplitResult[0];             
      mySplitResult[0] = mySplitResult[k-1];  ' then swapped first and last element of the string
      mySplitResult[k-1] = temp;
      result_string = result_string + mySplitResult[i]; ' here is the result string this is what is final output
   }
  else
  {
     result_string = result_string + mySplitResult[i];
  }
 }
</script>

完整html页面的版本。核心是@kennebec的代码,函数的输入/参数是需要的"文本"HTML标签列表,在省号之间。

我不明白。某些段落后的"未定义"错误…(www.juxta.hu/eng html/04.)但它的工作宽度放置html元素。如。

<em>Para<b>graph</b>I.C. etc.</em>

我的秘密是这个部分的工作方法:

 if (s[i].search("<")==-1)
                        {s[i].split("<*>")

如果分割的单词不(==-1)包含任何HTML元素(width "<" char),则截断该…

.split("<*>")

我很幸运。 ?
<script>
    function shuffle() 
    {
        for (var k = 0; k < arguments.length; k++) 
      {                             
            var x = document.getElementsByTagName(arguments[k]);
                for (var n = 0; n < x.length; n++) 
          {
                var s= x[n].innerHTML.split(' ');
                for (var i= 0; i<s.length; i++) 
                    {   if (s[i].search("<")==-1)
                        {s[i].split("<*>");
                            var A= s[i].split(''), c1= A.shift(), c3= A.pop() || '';
                        while(A.length) c1+= A.splice(Math.floor(Math.random()*A.length), 1);
                        s[i]= c1+c3;
                      }
                    }                                               
                    x[n].innerHTML= s.join(' ');
              }
      }
    }
</script>
<body onload='shuffle("p", "a", "li", "h1", "span", "u", "b", "dd", "dt")'>