首页 > 技术文章 > "abc123 ,def456",反转字母,其他位置不变

guolintao 2017-11-21 22:25 原文

"abc123 ,def456",反转字母,其他位置不变。

无意间看到个有意思的面试题,忽然来了兴趣想着来做一下。

操作字符串用正则的效率比较高,但第一反应还是用原生来操作。下面说一说思路。

  1. 取出字符串中字母部分,拆成数组,翻转
  2. 拼接回原先的字符串
var  a="abc123 ,def456";
//用split将a拆成数组b  , b=[['a','b','c','1','2','3',' '],['d','e','f','4','5','6']]


var  b= a.split(',').map((item)=>{
			return item.split('');	
		});

var result=[];
b.forEach((item)=>{
	for (var i = 0; i < item.length; i++) {
		if (!isNaN(Number(item[i]))) {
			result.push(item.splice(0,i).reverse().concat(item).join(''));
			break
		}	
	}
})

//最终得到的result数组中包含两项,cba123 ,fed456,用','进行拼接。得到最终结果。只针对这个或这种类型的字符串,如果存在字母前面有特殊字符,操作会跟麻烦,最后还是推荐用正则处理

console.log(result.join(','));

最后给出正则处理方法:

var result = a.replace(/([a-zA-Z]+)/g,str => str.split('').reverse().join(''))
console.log(result)

推荐阅读