博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
codewars--js--Convert all the cases!
阅读量:4694 次
发布时间:2019-06-09

本文共 3162 字,大约阅读时间需要 10 分钟。

问题描述:

In this kata, you will make a function that converts between camelCasesnake_case, and kebab-case.

You must write a function that changes to a given case. It must be able to handle all three case types:

js> changeCase("snakeCase", "snake")"snake_case"js> changeCase("some-lisp-name", "camel") "someLispName" js> changeCase("map_to_all", "kebab") "map-to-all" js> changeCase("doHTMLRequest", "kebab") "do-h-t-m-l-request" js> changeCase("invalid-inPut_bad", "kebab") undefined js> changeCase("valid-input", "huh???") undefined js> changeCase("", "camel") ""

我的思路:

先将不符合要求的筛选出来,return undefined;

然后通过swich(targetCase),分别转换。

我的答案:

通过为171 / 174。问题出现在部分不符合要求的不能识别。

function changeCase(identifier, targetCase){            // Your code here!            var a=["snake","camel","kebab"];            var id=identifier.split("");            if(identifier==""){
return "";} if(a.indexOf(targetCase)=="-1"|| (identifier.indexOf("-")!=-1 &&identifier.indexOf("_")!=-1 || (identifier.indexOf("-")!=-1 && identifier.indexOf(/A-Z/)!=-1) ||(identifier.indexOf(/A-Z/)!=-1 && identifier.indexOf("_")!=-1))){
return undefined;} switch(targetCase) { case "snake": for(var i=0;i

 

优秀答案:

(1)

function changeCase(identifier, targetCase){ if(!/^$|^[a-z]+(([A-Z][a-z]*)+|(-[a-z]+)*|(_[a-z]+)*)$/.test(identifier)) return undefined;   switch(targetCase){    case 'snake': return identifier.replace(/-([a-z])|([A-Z])/g, (_,x,y) => '_'+(x||y.toLowerCase()));    case 'camel': return identifier.replace(/[-_]([a-z])/g, (_,x) => x.toUpperCase());    case 'kebab': return identifier.replace(/_([a-z])|([A-Z])/g, (_,x,y) => '-'+(x||y.toLowerCase()));    default: return undefined;  }}

(2)

function changeCase(i, t){   if ( ( /[A-Z]/.test(i) + /[_]/.test(i) + /[-]/.test(i)) > 1 )  //这个好理解,当[A-Z],-,_,三者任意两个出现的时候,返回undefined    return undefined;  else if (t == "snake" )     return i.replace(/[A-Z]/g,a=>'_'+a.toLowerCase()).replace(/-([a-z])/g,(_,a)=> '_'+a);//先大写转“_”+小写,然后将所有-x转成_+小写  else if ( t== 'camel')     return i.replace(/_/g,'-').replace(/-([a-z])/g,(_,a)=> a.toUpperCase()); //先_转-,然后将-后面的第一个字母大写  else if (t== 'kebab' )    return i.replace(/_/g,'-').replace(/[A-Z]/g,a=>'-'+a.toLowerCase());//先_转-,然后将大写字母小写}

(3)建议这个,方便好懂,前面两个正则略复杂,不易懂

将所有单词分开,放入到数组中。

当需要用的时候,按照snake/kebab/camel的格式连接。

function changeCase(identifier, targetCase){  if (identifier === '') {    return '';  }  if (/^[a-z-]+$/.test(identifier)) {    identifier = identifier.split('-');  }  else if (/^[a-z_]+$/.test(identifier)) {    identifier = identifier.split('_');  }  else if (/^[a-z][A-Za-z]+$/.test(identifier)) {    identifier = identifier.replace(/([A-Z])/g, ' $1').toLowerCase().split(' '); //在大写字母前加空格,然后全部转小写,然后按空格分割  }    else {    return undefined;  }      switch (targetCase) {      case 'snake' : identifier = identifier.join('_'); break;    case 'kebab' : identifier = identifier.join('-'); break;    case 'camel' : identifier = identifier.map( (x,i) => i === 0 ? x : x[0].toUpperCase() + x.slice(1)).join(''); break;        default : return undefined  }  return identifier; }

 

哈哈哈!

转载于:https://www.cnblogs.com/hiluna/p/8907775.html

你可能感兴趣的文章
CIO知识储备
查看>>
cnblog!i'm coming!
查看>>
使用点符号代替溢出的文本
查看>>
Axios 中文说明
查看>>
fatal: remote origin already exists.
查看>>
gridview 自定义value值
查看>>
2018二月实现计划成果及其三月规划
查看>>
类名.class和getClass()区别
查看>>
12/17面试题
查看>>
LeetCode 242. Valid Anagram
查看>>
JSP表单提交乱码
查看>>
如何适应现代雇佣关系
查看>>
团队项目(第五周)
查看>>
SQL 优化经验总结34条
查看>>
开源 视频会议 收藏
查看>>
核心J2EE模式 - 截取过滤器
查看>>
.net开源CMS
查看>>
JdbcTemplate
查看>>
第一次使用maven记录
查看>>
SharePoint服务器端对象模型 之 使用CAML进展数据查询
查看>>