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