在javascript中混淆了字符串的中间
Mixing up the middle of strings in javascript
我正在寻找一种有说服力的方法来混合字符串中单词的中间字符,如"这是一个示例字符串"变成"这是一个示例字符串"。我想首先把单词分成一个数组,选择长度大于两个字符的单词,将第一部分的第一个和最后一个字母分开,但我想不出一个好的方法来打乱它们。
编辑更好的答案。
这里有一个快速而肮脏的方法。您可以使用正则表达式查找长度至少为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")'>
- 如何删除字符串中间的尾随小数点零
- 替换字符串中间的点
- 如何使用 Javascript 从字符串中间提取然后重新格式化文本
- 将字符串的中间部分替换为新字符串
- 在 n 个字符之后剪一个字符串,但如果它在一个单词的中间,则剪掉整个单词
- 如何使用正则表达式在字符串中间加加 1
- Javascript regex匹配(中间是随机字符串)
- JavaScript RegEx新手-从三个单词字符串中选择中间单词
- Android我需要在数组的中间字符串的中间1个Superscript字符
- JavaScript子字符串(),获取字符串中间的字符
- 如何从字符串中间解析数字
- 如何删除字符串中间数字的最后一位数字
- 如何在javascript中有效地匹配字符串中间的数字
- 正则表达式与字符串的开头和结尾完全匹配,中间有通配符
- 只替换中间的特殊字符,而不是字符串的开始和结束
- 如何在两个不断变化的字符串之间选择中间文本
- 生成序列号,中间添加字符串
- 在Appcelerator中使用带有属性的字符串,并在字符串中间使用@符号
- 将变量传递到字符串中间的数组
- 将int处理为字符串中间公式的Javascript