javascript练习题(3):基础字符串运算
用两种方法实现下列问题!
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):基础字符串运算的更多相关文章
- JavaScript框架设计(四) 字符串选择器(选择器模块结束)
JavaScript框架设计(四) 字符串选择器(选择器模块结束) 经过前面JavaScript框架设计(三) push兼容性和选择器上下文的铺垫,实现了在某一元素下寻找,现在终于进入了字符串选择器 ...
- JavaScript中常见的字符串操作函数及用法
JavaScript中常见的字符串操作函数及用法 最近几次参加前端实习生招聘的笔试,发现很多笔试题都会考到字符串的处理,比方说去哪儿网笔试题.淘宝的笔试题等.如果你经常参加笔试或者也是一个过来人,相信 ...
- Java与JavaScript中判断两字符串是否相等的区别
JavaScript是一种常用的脚本语言,这也决定了其相对于其他编程语言显得并不是很规范.在JavaScript中判断两字符串是否相等 直接用==,这与C++里的String类一样.而Java里的等号 ...
- JavaScript 的一些基础知识
JavaScript基本语法 调试 打开 Chrome 开发工具 Win F12 Mac Command + Option + I 输入代码.测试执行 var str = 'evenyao' cons ...
- javascript之正则表达式基础知识小结
javascript之正则表达式基础知识小结,对于学习正则表达式的朋友是个不错的基础入门资料. 元字符 ^ $ . * + ? = ! : | \ / ( ) [ ] { } 在使用这些符号时需要 ...
- php面试专题---12、JavaScript和jQuery基础考点
php面试专题---12.JavaScript和jQuery基础考点 一.总结 一句话总结: 比较常考察的是JavaScript的HTML样式操作以及jQuery的选择器和事件.样式操作. 1.下列不 ...
- 100多个很有用的JavaScript函数以及基础写法大集合
100多个很有用的JavaScript函数以及基础写法大集合 1.document.write("");为 输出语句2.JS中的注释为//3.传统的HTML文档顺序是:docume ...
- JS获取url中query_str JavaScript RegExp 正则表达式基础详谈
面我们举例一个URL,然后获得它的各个组成部分:http://i.cnblogs.com/EditPosts.aspx?opt=1 1.window.location.href(设置或获取整个 URL ...
- JavaScript中,提取子字符串方法:Slice、Substring、Substr的比较。
在JavaScript中,提取子字符串主要是通过 Slice.Substring.Substr 三个方法之一. // slice // 语法: string.slice(beginSlice [, e ...
随机推荐
- PhpStorm创建Drupal模块项目开发教程
在PhpStorm开发工具中,创建Drupal开发项目有两种方式:整合Drupal到现有的项目中和直接创建一个新的Drupal模块. 接下来将展示这两种方式的具体操作! 整合Drupal到现有的项目 ...
- Crystal Report 在 VS 2010 中的使用和发布
原文:Crystal Report 在 VS 2010 中的使用和发布 使用: 打开CrystalReport官网下载页 目前最新版本为13.0.4 选择“SAP Crystal Reports, v ...
- Bootstrap Paginator分页插件
Bootstrap Paginator分页插件使用示例 最近做的asp.netMVC项目中需要对数据列表进行分类,这个本来就是基于bootstrap开发的后台,因此也就想着bootstrap是否有分页 ...
- JAVA 异常 throw 与 throws
最近一直throw和throw new …… 获取头部罢工,要彻底生气清楚这件事,他对这个思想精华收集了很多网友.这里摘录. throws全部异常信息throw则是指抛出的一个详细的异常类型.通常在一 ...
- 一般处理程序装配数据到html页的原理
相应html页面并保存状态输出原理:(有状态请求)请求页面提交给后台,获取值进行处理之后再根据name标记读取原html文件文字将值替换再一并返回给页面:(在response时替换)比如原模板< ...
- MVC与Validate验证提示的样式修改
MVC中使用Validate的验证,要修改错误提示样式一共有3处需要修改,否则就不太完美了: MVC中的Validate的验证机制只用在后台写一次,就可以完成前台和后台的完美验证,前台的验证主要是依靠 ...
- C++中内存泄露的检测
C++没有java的内存垃圾回收机制,在程序短的时候可能比较容易发现问题,在程序长的时候是否有什么检测的方法呢? 假设有一个函数可以某点检测程序的内存使用情况,那是否可以在程序开始的时候设置一个点,在 ...
- github上写个人简历
随笔- 70 文章- 0 评论- 567 在github上写个人简历——先弄个主页 起因 不知道园友们在使用智联招聘等网站填写简历的时候对要求输入的内容有没有一种无力感,不吐槽了反正就一句话 ...
- api的安全问题
在给第三方系统提供api时,我们需要注意下安全问题. 比较常见的接口有http接口.以http接口为例.我们需要注意的几点: 1.只有被允许的系统才可以调用api 2.如果http请求被截获.也不 ...
- SolrCloud攻略
SolrCloud攻略 近期一直在使用SolrCloud,乘着酒醉大概总结一下. 1.安装 原来一直有个误区,认为SolrCloud启动时,必须至少有个core才可以,其实不然. 首先按照Solr官方 ...