在JS中按字符类别反转字符串

3

我需要将这个字符串 ["abc123!@#\n314159","987bbc\n#$%\nxyz886"] 转换为这个字符串 ["zyx688\n%$#\n789cbb","951413\ncba321#@!"]

我的当前代码:

function reverseAll(arr){
  //coding here...
  var reversedArr = [];
  (function(){
    arr.reverse()
  })();
  (function(){
    for (var i = 0; i < arr.length; i++) {
        reversedArr.push(arr[i].split('\n').reverse())       
      }
  })();
  console.log (reversedArr)
}

日志 [ [ 'xyz886', '#$%', '987bbc' ], [ '314159', 'abc123!@#' ] ]

我在对每个字符类别进行反转时遇到了麻烦,我认为可以使用正则表达式,但不确定该怎么做。


将多个字符串连接成一个单一的字符串并不是一个问题。 - Sierra Kilo
2
我不清楚预期输出的逻辑。 - brk
一个链接到Codewars的kata,包含指令 https://www.codewars.com/kata/ttt-number-8-reverse-all/train/javascript - Sierra Kilo
1个回答

2
您可以使用以下方法来获取预期的反转效果:

function reverseAll(data)
{
 var output=[];
  for(var j=data.length-1;j>=0;j--){
  var rev = "";
  var arr=data[j].split("\n");
  const regex = /\d+|[a-zA-Z]+|[^\da-zA-Z]+/g;
  let m;

    for(var i=arr.length-1;i>=0;i--)
    {
      while ((m = regex.exec(arr[i])) !== null) 
           rev+=m[0].split("").reverse().join("");
       if(i>0)
         rev+='\n';
    }
  output.push(rev);
  }
 return output;
}

console.log(reverseAll(["abc123!@#\n314159","987bbc\n#$%\nxyz886"]));


我还没有测试过这个,但它是否也区分数字和符号呢?如果是的话,在哪里区分?对我来说,它似乎只区分字母和其他所有字符。 - Sierra Kilo
有三种不同的区分...数字、字母和其他任何字符...并且它们是通过这个正则表达式进行区分的:/\d+|[a-zA-Z]+|[^\da-zA-Z]+/g - Mustofa Rizwan
Ah d+ 表示数字。谢谢。 - Sierra Kilo

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