在javascript中混合字符串的中间部分

时间:2011-11-16 03:24:48

标签: javascript html string

我正在寻找一种雄辩的方式来混合字符串中的单词的中间字符,因为“这是一个示例字符串”变成“这是一个电子书。” 我想首先将单词分成一个数组,选择长于两个字符的单词,分出第一部分的第一个和最后一个字母,但我无法想出一个加扰它们的好方法。

6 个答案:

答案 0 :(得分:2)

编辑更好的答案。

这是一种快速而肮脏的方法。您可以使用正则表达式查找至少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;
});

答案 1 :(得分:1)

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
*/

答案 2 :(得分:0)

编写一个函数,它接受一个数组并将索引i和j之间的所有内容混洗。您可以找到examples here

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

调用所有对的随机播放功能

答案 3 :(得分:0)

以下是为您执行此操作的一些代码:

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;
};

随机播放功能:http://snippets.dzone.com/posts/show/849

在这里:http://jsfiddle.net/66LXx/

答案 4 :(得分:0)

这段代码可以解决这个问题,是的,正如你所说的那样,我已经考虑在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>

答案 5 :(得分:0)

完整html页面的版本。 核心是@ kennebec的代码,函数的输入/参数是想要的&#34; textual&#34; aphostrophes之间的HTML标签。

我不理解&#39;。未定义&#39;一些段落后的错误.. (www.juxta.hu/eng/04.html) 但它也在工作 - 宽度嵌入的HTML元素。 例如。

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

我的秘诀在于本节的方法是:

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

如果分割的单词是NOT(== - 1)包含任何HTML元素(宽度&#34;&lt;&#34; 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")'>