用两种方法实现下列问题!

1. 把一个字符串转化为驼峰写法

需求:margin-left=>marginLeft

思路一:split

把它转化为一个数组然后修改内容

  1. function convertStr(str){
  2. var arr=str.split('-');
  3. arr=arr.map(function(item){
  4. return item[0].toString().toUpperCase()+item.slice(1);
  5. });
  6. var newStr=arr.join('');
  7. newStr=newStr[0].toLowerCase()+newStr.slice(1);
  8. //console.log(newStr);
  9. return newStr;
  10. }
  11. convertStr('border-left-color');//borderLeftColor

思路二:暴力拆解

强行用循环暴力拆解

  1. function convertStr(str){
  2. var newStr='';
  3. for(var i=0;i<str.length;i++){
  4. if(str[i]!=='-'){
  5. if(str[i-1]&&str[i-1]=='-'){
  6. newStr+='';
  7. }else{
  8. newStr+=str[i];
  9. }
  10. }else{
  11. newStr+=str[i+1].toUpperCase();
  12. }
  13. }
  14. //console.log(newStr);
  15. return newStr;
  16. }
  17. convertStr('border-left-color');

思路三:正则

  1. function convertStr(str){
  2. var re=/-(\w)/g;//匹配横杠下的全部字符比如-b,-c
  3. return str.replace(re,function($0,$1){
  4. //$0表示整个字符串,$1表示正则内第一个括号的内容
  5. return $1.toUpperCase();
  6. });
  7. }
  8. console.log(convertStr('border-left-color'))

正则的题目出不完,所以死记是没有用的。

2. 查找字符串出现最多的字符和个数

思路一 :暴力拆解(对象)

不如构造一个对象?

  1. var a='isfaogjaa;fgagp[;jhbsolbsdfgbvsdfbdbd]';
  2. function findMost(str){
  3. var type={};
  4. for(var i=0;i<str.length;i++){
  5. if(type.hasOwnProperty(str[i])){
  6. type[str[i]]+=1;
  7. }else{
  8. type[str[i]]=1;
  9. }
  10. }
  11. type.getMost=['',0];
  12. for(attr in type){
  13. if(type[attr]>type.getMost[1]){
  14. type.getMost=[attr,type[attr]];
  15. }
  16. }
  17. //console.log(type.getMost[0]);
  18. return type.getMost;
  19. }
  20. findMost(a);//“b”

通过对象进行判断。

思路二:正则

把字符串转为数组,进行排序。

不必指定任何规则,因为已经排列好了。

  1. var a='isfaogjaa;fgagp[;jhbsolbsdfgbvsdfbdbd]';
  2. function findMost(str){
  3. var arr=str.split('');
  4. arr.sort();
  5. str=arr.join('');
  6. var re=/(\w)\1+/g;
  7. //表示重复1次的部分。
  8. var num=0;
  9. var value='';
  10. str.replace(re,function($0,$1){
  11. //console.log($0)//aaa,bbb,。。。就像一个循环
  12. if(num<$0.length){
  13. num=$0.length;
  14. value=$1;
  15. }
  16. });
  17. console.log([num,value]);
  18. return [num,value];
  19. }
  20. findMost(a);//“b”

3. 给数字加千分符

比如:10000=>10,000

转化之后显然是一个字符串。

思路一:暴力拆解

这个拆解已经很暴力了。

  1. var a=8752317;
  2. function changeNum(num){
  3. var arr=num.toString().split('');
  4. var newArr=[];
  5. var head=num.toString().length%3;
  6. arr=arr.slice(head)
  7. for(var i=0;i<arr.length;i+=3){
  8. newArr.push(arr.slice(i,i+3).join().replace(/,/g,''));
  9. }
  10. var newStr='';
  11. if(num.toString().slice(0,head)){
  12. newStr=num.toString().slice(0,head)+','+newArr.toString();
  13. }
  14. console.log(newStr);
  15. return arr;
  16. }
  17. changeNum(a);

思路二:正则

实话说正则很难。要匹配位置,要从后匹配

  1. (?=)前项声明
  2. (?!)反前项声明

比如/a(?=b)/g表示匹配的是字符串出现"ab"时,其中的a。反之,/a(?!b)/g匹配的是所有不为ab字符串中的a如果你不写前面的a,那么这个前项声明就是匹配位置。

  1. var a=8752317;
  2. function changeNum(num){
  3. var re=/(?=(\d{3})+$)/g;
  4. //匹配规则:重复出现三次都是数字,最少一次,从后面开始($)
  5. return num.toString().replace(re,',')
  6. }
  7. console.log(changeNum(a));

结果又有bug比如752317,转化结果是,752,317

所以还得用反前项声明匹配边界。

  1. var re=/(?=(?!\b)(\d{3})+$)/g;

4. 返回一个只包含数字类型的数组

比如afjasoeigjs123sgdhedhhe456osddhnofd789=>[123,456,789]

思路一:暴力拆解

  1. var a='afjasoeigjs123sgdh1edhhe456osddhnofd789';
  2. function change(str){
  3. var arr=[];
  4. for(var i=0;i<str.length;i++){
  5. if(Number(str[i])){
  6. if(str[i-1]&&Number(str[i-1])){
  7. arr.push(str[i])
  8. }else{
  9. arr.push('\/');
  10. arr.push(str[i]);
  11. }
  12. }
  13. }
  14. arr=arr.join().replace(/,/g,'').split('\/');
  15. arr=arr.filter(function(a){
  16. return a!=false;
  17. });
  18. return arr
  19. }
  20. console.log(change(a));

暴力拆解不是没有价值。在某些极端环境下,或许可以提供了某种思路。

思路二:正则

  1. var a='afjasoeigjs123sgdh1edhhe456osddhnofd789';
  2. function change(str){
  3. var re=/\d+/g;
  4. return str.match(re);
  5. }
  6. console.log(change(a));

javascript练习题(3):基础字符串运算的更多相关文章

  1. JavaScript框架设计(四) 字符串选择器(选择器模块结束)

    JavaScript框架设计(四) 字符串选择器(选择器模块结束) 经过前面JavaScript框架设计(三) push兼容性和选择器上下文的铺垫,实现了在某一元素下寻找,现在终于进入了字符串选择器 ...

  2. JavaScript中常见的字符串操作函数及用法

    JavaScript中常见的字符串操作函数及用法 最近几次参加前端实习生招聘的笔试,发现很多笔试题都会考到字符串的处理,比方说去哪儿网笔试题.淘宝的笔试题等.如果你经常参加笔试或者也是一个过来人,相信 ...

  3. Java与JavaScript中判断两字符串是否相等的区别

    JavaScript是一种常用的脚本语言,这也决定了其相对于其他编程语言显得并不是很规范.在JavaScript中判断两字符串是否相等 直接用==,这与C++里的String类一样.而Java里的等号 ...

  4. JavaScript 的一些基础知识

    JavaScript基本语法 调试 打开 Chrome 开发工具 Win F12 Mac Command + Option + I 输入代码.测试执行 var str = 'evenyao' cons ...

  5. javascript之正则表达式基础知识小结

    javascript之正则表达式基础知识小结,对于学习正则表达式的朋友是个不错的基础入门资料.   元字符 ^ $ . * + ? = ! : | \ / ( ) [ ] { } 在使用这些符号时需要 ...

  6. php面试专题---12、JavaScript和jQuery基础考点

    php面试专题---12.JavaScript和jQuery基础考点 一.总结 一句话总结: 比较常考察的是JavaScript的HTML样式操作以及jQuery的选择器和事件.样式操作. 1.下列不 ...

  7. 100多个很有用的JavaScript函数以及基础写法大集合

    100多个很有用的JavaScript函数以及基础写法大集合 1.document.write("");为 输出语句2.JS中的注释为//3.传统的HTML文档顺序是:docume ...

  8. JS获取url中query_str JavaScript RegExp 正则表达式基础详谈

    面我们举例一个URL,然后获得它的各个组成部分:http://i.cnblogs.com/EditPosts.aspx?opt=1 1.window.location.href(设置或获取整个 URL ...

  9. JavaScript中,提取子字符串方法:Slice、Substring、Substr的比较。

    在JavaScript中,提取子字符串主要是通过 Slice.Substring.Substr 三个方法之一. // slice // 语法: string.slice(beginSlice [, e ...

随机推荐

  1. 远程控制编写之屏幕传输 MFC实现 屏幕截图 发送bmp数据 显示bmp图像

    远程控制编写之屏幕传输  MFC实现  屏幕截图 发送bmp数据 显示bmp图像: 一 : 首先要了解bmp图像的结构 详情请看我转载的一篇文章http://blog.csdn.net/hnust_x ...

  2. Mysql高级之游标

    原文:Mysql高级之游标 什么是游标?select 语句也许一次性会取出来n条语句,那么游标便可以一次取出来select中的一条记录.每取出来一条,便向下移动一次!可以实现很复杂逻辑! 上面还有有一 ...

  3. Oracle中join left,join right,inner join,(+) 等

    Oracle中join left,join right,inner join,(+) 等 博客分类: Oracle   建表create table TEST1create table TEST1(  ...

  4. PHP中生成验证码

    //生成图片$im = imagecreatetruecolor(100,30);//生成颜色,当第一次调用生成颜色的方法,是生成背景颜色,默认是黑色//如果想自定义背景颜色,用到imagefill函 ...

  5. 关于如何惟一地标识一台Android设备的综合性讨论

    想必大家在开发Android项目的时候,多多少少会遇到“如何惟一地标识一台Android设备”等类似的问题.不只是以前,即使是现在乃至可以预见的将来,这个问题都将一直存在. 如果大家使用搜索工具搜索的 ...

  6. 【分享】史上最全的Python电子书教程资源下载

    网上搜集的,点击即可下载,希望提供给有需要的人^_^   O'Reilly.Python.And.XML.pdf 2.02 MB   OReilly - Programming Python 2nd. ...

  7. Nutch搜索引擎Solr简介及安装

    Nutch搜索引擎(第2期)_ Solr简介及安装   1.Solr简介 Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的 ...

  8. [置顶] android调用第三方库——第四篇——调用多个第三方库

    0:前言: 在前面三篇中我们介绍了android调用第三方库的形式,在这一篇中我们介绍调用多个第三方库的Android.mk的写法,由于其他三篇介绍的很详细,这里只给出Android.mk的内容. [ ...

  9. Ajax运用总结B

    Jquery重新学习之八[Ajax运用总结B]   上一篇简单介绍普通javascript以及Jquery的AJAX方法,其中Jquery.ajax()是功能比较强悍的底层方法,可以更多地关注实现过程 ...

  10. 浅谈DevExpress<一>:换肤

    最近要用到devExpress,一句话,很好很强大,比起vs自带的winform界面,种类和花样要多了不少,然而,强力的功能带来了庞大的信息量,所以我打算通过一些小模块来和大家一起对它进行探讨和研究. ...