将字符串开头的n个字符移到末尾

14

这似乎是一个简单的问题,但我找不到解决方案。我想从字符串中取出前面的两个字符,并将它们移到字符串的末尾。例如,OK12会变成12OK。

编辑:目前为止,我已经尝试过截取字符串,然后将其添加到字符串的其余部分,但我认为可能有一种一行代码的解决方案,类似于预定义函数或其他什么东西。


1
@JosephtheDreamer。当一个人说他尝试过,我相信他。包含许多失败尝试的好处是什么?他可能不知道所有的字符串函数。 - gdoron
@marue。你能展示一下如何使用哪些关键词吗? - gdoron
我一开始使用了切片,但完全忽略了可以在一行中完成的事实,主题表述不够清楚,抱歉。 - Malyo
1
@marue。我的朋友,你刚刚看到它可能有些棘手,人们可能会像你一样感到困惑。 :) - gdoron
4个回答

19
"OK12".substr(2) + "OK12".substr(0,2)

通用解决方案:

var result = str.substr(num) + str.substr(0, num);

实时演示


+1 对于通用方法来说很好,但是正则表达式的方法更整洁,尽管速度较慢...但更整洁! :) - VisioN
@VisioN。你真的认为正则表达式是这里最好的方法吗?你会对匹配第四个字符说同样的话吗?使用/.{3}(.)/代替str[3]?正则表达式并不总是最好的解决方案,很多时候它并不是。 - gdoron
@gdoron 我不是在谈论那个。我更喜欢正则表达式的美学,而不是实用性。 - VisioN
1
2022年:.substr()已被弃用,请使用.substring()代替。 - NHerwich

8

各种技术:

str.slice(2) + str.slice(0,2);

str = str.replace(/^(.{2})(.+)/, '$2$1');

for (var a=str.split(""),i=2;i--;) a.push(a.shift());
str = a.join('');

+1,正则表达式方法确实很棒!同意@gdoron的观点,你最好使用.* - VisioN
2
如果有正好两个字符(例如“AB”),那么.+将无法匹配,导致替换不起作用,从而得到正确的结果——TA DA!在这种情况下使用.+会使解释器做更少的工作,仍然能够得到正确的结果。 - Phrogz
@Phrogz。而且数组的方式让我感到头晕... :) - gdoron
@gdoron 那么多的旋转和循环会让你这样的。 ;) - Phrogz
@Phrogz。和<s>吐痰</s>分割。:-) - gdoron
显示剩余3条评论

1
text.slice(2) + text.slice(0, 2);

1
var a='ok12';
a=a.substr(2,a.length-2)+a.substr(0,2);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接