在JavaScript中反转string

我试图扭转inputstring

var oneway = $('#inputfield').val(); var backway = oneway.reverse(); 

但萤火虫告诉我, oneway.reverse()不是一个函数。 有任何想法吗?

谢谢

reverse()是数组实例的一种方法。 它不会直接在string上工作。 您应该先将string的字符拆分为数组,然后颠倒数组,然后重新joinstring:

 var backway = oneway.split("").reverse().join(""); 

更新

上面的方法只对“常规”string安全。 请参阅下面Mathias Bynens的评论,以及他对安全的反向方法的回答 。

以下技术(或类似)通常用于在JavaScript中反转string:

 // Don't use this! var naiveReverse = function(string) { return string.split('').reverse().join(''); } 

事实上,迄今为止发布的所有答案都是这种模式的变体。 但是,这个解决scheme有一些问题。 例如:

 naiveReverse('foo 𝌆 bar'); // → 'rab    oof' // Where did the `𝌆` symbol go? Whoops! 

如果您想知道为什么会发生这种情况,请阅读JavaScript的内部字符编码 。 (TL; DR: 𝌆是一个星号,JavaScript将它作为两个单独的代码单元公开)

但还有更多:

 // To see which symbols are being used here, check: // http://mothereff.in/js-escapes#1ma%C3%B1ana%20man%CC%83ana naiveReverse('mañana mañana'); // → 'anãnam anañam' // Wait, so now the tilde is applied to the `a` instead of the `n`? WAT. 

testingstring反向实现的好string如下 :

 'foo 𝌆 bar mañana mañana' 

为什么? 因为它包含一个星号( 𝌆 )( 在JavaScript中用代理对代表 )和一个组合标记(最后一个mañana实际上由两个符号组成:U + 006E拉丁小字母N和U + 0303合并字节) 。

代理对出现的顺序不能颠倒,否则星形符号将不会再出现在“反转”string中。 这就是为什么你在前面例子的输出中看到了这些 标记的原因。

组合标记总是适用于前一个符号,因此必须将主符号(U + 006E LATIN小字母N)作为整体标记(U + 0303合并TILDE)。 颠倒它们的顺序将使组合标记与string中的另一个符号配对。 这就是为什么示例输出有而不是ñ

希望这解释了为什么到目前为止发布的所有答案都是错误的


为了回答你最初的问题 – 如何正确地反转JavaScript中的一个string – 我写了一个小的JavaScript库,它能够识别Unicode的string反转。 它没有我刚刚提到的任何问题。 图书馆被称为Esrever ; 它的代码在GitHub上,它可以在任何JavaScript环境中运行。 它带有一个shell实用程序/二进制文件,所以你可以很容易地从你的terminal反向string,如果你想。

 var input = 'foo 𝌆 bar mañana mañana'; esrever.reverse(input); // → 'anañam anañam rab 𝌆 oof' 
 String.prototype.reverse = function () { return this.split("").reverse().join(""); } 

灵感来自我得到的第一个结果,当我做了一个谷歌JavaScriptstring反向 。

Google更难,兄弟。 这是埃德曼。

 function reverse (s) { for (var i = s.length - 1, o = ''; i >= 0; o += s[i--]) { } return o; } 

http://eddmann.com/posts/ten-ways-to-reverse-a-string-in-javascript/

http://jsperf.com/string-reverse-function-performance

 // You could reverse a string without creating an array String.prototype.reverse= function(){ var s= '', L= this.length; while(L){ s+= this[--L]; } return s; } var s1= 'the time has come, the walrus said, to speak of many things'; s1.reverse() /*returned value: (String) sgniht ynam fo kaeps ot, dias surlaw eht, emoc sah emit eht */ 

reverse是数组上的一个函数,它是一个string。 您可以将string分解为数组,然后将其反转,然后将其组合回去。

 var str = '0123456789'; var rev_str = str.split('').reverse().join(''); 
 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <script> $(document).ready(function () { $("#stringInput").keyup(function () { debugger; var string = $("#stringInput").val(); var stringArray = []; sInput = string.toString(); for (var i = 0, len = sInput.length; i < len; i++) { stringArray.push(sInput.charAt(i)); } stringArray.reverse(); str = stringArray.join(''); document.getElementById("stringOutput").value = str; }); $("button").click(function () { debugger; $("#myForm").toggle(); }); }); </script> </head> <body> <div> <form name="myForm" id="myForm"> <table> <tr> <td>Insert Elements :</td> <td><input type="text" name="stringInput" id="stringInput"/></td> <td>Output :</td> <td><input type="text" id="stringOutput" name="stringOutput" readonly="true" /></td> </tr> </table> </form> <button>Show/Hide</button> </div> </body> </html> 

这可能是所有浏览器均可接受的方式:

 function reverse(s) { var o = ''; for (var i = s.length - 1; i >= 0; i--) o += s[i]; return o; } 

称之为魅力:

 reverse('your_string'); 

我想你会发现其实reverse()不是jQuery中的一个函数。 顺便说一下,jQuery真的很擅长操纵你的DOM,但是并不是真正的string操作(尽pipe你可能会得到插件/写你自己的)来做到这一点。

我发现在JavaScript中反转string的最佳方法是执行以下操作:

 String.prototype.reverse = function(){ splitext = this.split(""); revertext = splitext.reverse(); reversed = revertext.join(""); return reversed; } 

http://www.bytemycode.com/snippets/snippet/400/上find

我想你会发现,如果你在上面的代码中popup上面的代码,你的电话.reverse()应该工作:)

 String.prototype.strReverse = function() { var newstring = ""; for (var s=0; s < this.length; s++) { newstring = this.charAt(s) + newstring; } return newstring; }; 

Mathias Bynens,你的代码工作非常感谢,非常感谢!

我把你的代码转换成一个函数,这样用户就可以从这里复制它。

谢谢!

 //The function reverse a string, JavaScript's has internal character encoding so we are //unable to reverse the string in the "easy ways". For example the TL;DR: 𝌆 is an astral //symbol, and JavaScript exposes it as two separate code units. function ReverseString(string){ //- var regexSymbolWithCombiningMarks = /([\0-\u02FF\u0370-\u1DBF\u1E00-\u20CF\u2100-\uD7FF\uDC00-\uFE1F\uFE30-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF])([\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]+)/g; var regexSurrogatePair = /([\uD800-\uDBFF])([\uDC00-\uDFFF])/g; //- //Step 1: deal with combining marks and astral symbols (surrogate pairs) string = string //Swap symbols with their combining marks so the combining marks go first .replace(regexSymbolWithCombiningMarks, function($0, $1, $2) { return reverse($2) + $1; }) // Swap high and low surrogates so the low surrogates go first .replace(regexSurrogatePair, '$2$1'); // Step 2: reverse the code units in the string var result = ''; var index = string.length; while (index--) { result += string.charAt(index); } //Return value return result; } 

这个反向原型函数是使用“this”实现的。 如果您看到“this”的日志控制台,它将生成数组,并且它具有长度属性。 所以呢! 只需使用代码片段中所示的反向“for-loop”即可。

 String.prototype.reverse = function () { console.log(this); var result = ""; var len = this.length; for (i = (len-1); i >= 0 ; i--) { result += this[i]; } return result; }; alert("elahnu jaknap".reverse()); 

使用这个简单的方法来反转string的位置

  function fun(str){ var arr1=str.split(' '); console.log(arr1); var strings='',rever=''; for(var i=0;i<arr1.length;i++) { strings=arr1[i].split(''); rever+=strings.reverse().join('')+' '; } console.log(rever.split(' ')); console.log(rever.trim()); }; fun('javascript is fun');