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

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

需求:margin-left=>marginLeft

思路一:split

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

function convertStr(str){
var arr=str.split('-');
arr=arr.map(function(item){
return item[0].toString().toUpperCase()+item.slice(1);
}); var newStr=arr.join('');
newStr=newStr[0].toLowerCase()+newStr.slice(1);
//console.log(newStr);
return newStr;
} convertStr('border-left-color');//borderLeftColor

思路二:暴力拆解

强行用循环暴力拆解

function convertStr(str){
var newStr=''; for(var i=0;i<str.length;i++){
if(str[i]!=='-'){
if(str[i-1]&&str[i-1]=='-'){
newStr+='';
}else{
newStr+=str[i];
}
}else{
newStr+=str[i+1].toUpperCase();
}
}
//console.log(newStr);
return newStr;
} convertStr('border-left-color');

思路三:正则

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

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

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

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

不如构造一个对象?

var a='isfaogjaa;fgagp[;jhbsolbsdfgbvsdfbdbd]';

function findMost(str){
var type={};
for(var i=0;i<str.length;i++){
if(type.hasOwnProperty(str[i])){
type[str[i]]+=1;
}else{
type[str[i]]=1;
}
} type.getMost=['',0]; for(attr in type){
if(type[attr]>type.getMost[1]){
type.getMost=[attr,type[attr]];
}
}
//console.log(type.getMost[0]);
return type.getMost;
} findMost(a);//“b”

通过对象进行判断。

思路二:正则

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

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

var a='isfaogjaa;fgagp[;jhbsolbsdfgbvsdfbdbd]';

function findMost(str){
var arr=str.split('');
arr.sort();
str=arr.join('');
var re=/(\w)\1+/g;
//表示重复1次的部分。 var num=0;
var value='';
str.replace(re,function($0,$1){
//console.log($0)//aaa,bbb,。。。就像一个循环 if(num<$0.length){
num=$0.length;
value=$1;
} });
console.log([num,value]);
return [num,value];
} findMost(a);//“b”

3. 给数字加千分符

比如:10000=>10,000

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

思路一:暴力拆解

这个拆解已经很暴力了。

var a=8752317;

function changeNum(num){
var arr=num.toString().split('');
var newArr=[];
var head=num.toString().length%3;
arr=arr.slice(head)
for(var i=0;i<arr.length;i+=3){
newArr.push(arr.slice(i,i+3).join().replace(/,/g,''));
} var newStr='';
if(num.toString().slice(0,head)){
newStr=num.toString().slice(0,head)+','+newArr.toString();
} console.log(newStr);
return arr;
} changeNum(a);

思路二:正则

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

(?=)前项声明
(?!)反前项声明

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

var a=8752317;

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

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

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

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

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

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

思路一:暴力拆解

var a='afjasoeigjs123sgdh1edhhe456osddhnofd789';

function change(str){

    var arr=[];
for(var i=0;i<str.length;i++){
if(Number(str[i])){
if(str[i-1]&&Number(str[i-1])){ arr.push(str[i])
}else{
arr.push('\/');
arr.push(str[i]);
} }
} arr=arr.join().replace(/,/g,'').split('\/');
arr=arr.filter(function(a){
return a!=false;
});
return arr
} console.log(change(a));

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

思路二:正则

var a='afjasoeigjs123sgdh1edhhe456osddhnofd789';

function change(str){
var re=/\d+/g;
return str.match(re);
} 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. 怎样使用万用表来测试板子上的TX和RX引脚

    最近在看openwrt时看到的一个方法,直接看下面写的: 文章来自:http://wiki.openwrt.org/doc/hardware/port.serial 经实际测试时发现,将万用表的负表笔 ...

  2. HTTP 报文中的 Header 字段进行身份验证

    [小技巧][ASP.Net MVC Hack] 使用 HTTP 报文中的 Header 字段进行身份验证 在一些 Web 系统中,身份验证是依靠硬件证书进行的:在电脑上插入 USB 证书,浏览器插件读 ...

  3. jsp连接MySQL数据库显示GIS地理数据乱码问题的解决(select AsText(the_geom))

    oh,fuck,经过我昨天下午到今天的努力,终于将这一问题成功解决了,哈哈哈 问题详细描述: 我通过jsp页面连接上MySQL数据库,取出存在表中的地理数据(类型是geometry,具体有POINT. ...

  4. QC邮件转发工具Mail Direct安装配置手册

    QC邮件转发工具Mail Direct安装配置手册 2010-06-11 10:00:56| 分类: 软件测试 | 标签: |举报 |字号大中小 订阅 QC邮件转发工具安装配置手册 由于公司没有独立的 ...

  5. linux_shell 特殊符号的介绍

    linux_shell 特殊符号的介绍 2011-12-17 17:54:07 分类: 原文地址:linux_shell 特殊符号的介绍 作者:xu_liuzhen linux_shell 特殊符号的 ...

  6. ios中mvc的FormsAuthentication.SetAuthCookie(cookieUserName, false)失败

    如果楼主使用.net开发,要注意FormsAuthentication.SetAuthCookie 方法的使用会导致ios出现该问题.因为这个方法在ios设备上是把票据加入到url中,导致url和你的 ...

  7. Light, more light - PC110701

    欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/uva10110.html 原创:Ligh ...

  8. Step one : 熟悉Unix/Linux Shell 常见命令行 (二)

    2.学会使用一些文本操作命令 sed -- stream editor 1. Sed简介sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pat ...

  9. 在ASP.NET MVC3 中利用Jsonp跨域访问

    在ASP.NET MVC3 中利用Jsonp跨域访问 在信息系统开发的时,根据相关业务逻辑难免会多系统之间互相登录.一般情况下我们需要在多系统之间使用多个用户名和密码.这样客户就需要在多个系统之间重复 ...

  10. inet_aton()

    两次技术面试都被让c语言实现inet_aton()函数 看来这个函数真的很重要. 我先贴上我自己的实现代码 #include <stdio.h> #include <math.h&g ...