2013年8月23日星期五

javascript中字符串常用操作整理 - webmoon

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
javascript中字符串常用操作整理 - webmoon  阅读原文»

字符串的操作在js中非常频繁,也非常重要。以往看完书之后都能记得非常清楚,但稍微隔一段时间不用,便会忘得差不多,记性不好是硬伤啊。。。今天就对字符串的一些常用操作做个整理,一者加深印象,二者方便今后温习查阅。

也可到独立博客查看:javascript中字符串常用操作总结

String对象属性

(1) length属性

length算是字符串中非常常用的一个属性了,它的功能是获取字符串的长度。当然需要注意的是js中的中文每个汉字也只代表一个字符,这里可能跟其他语言有些不一样。

var str = 'abc';
console.log(str.length);

(2) prototype属性

prototype在面向对象编程中会经常用到,用来给对象添加属性或方法,并且添加的方法或属性在所有的实例上共享。因此也常用来扩展js内置对象,如下面的代码给字符串添加了一个去除两边空格的方法:

String.prototype.trim = function(){
return this.replace(/^\s*|\s*$/g, '');
}

String对象方法

1.获取类方法

(1) charAt()

stringObject.charAt(index)

charAt()方法可用来获取指定位置的字符串,index为字符串索引值,从0开始到string.leng – 1,若不在这个范围将返回一个空字符串。如:

var str = 'abcde';
console.log(str.charAt(
2)); //返回c
console.log(str.charAt(8)); //返回空字符串

(2) charCodeAt()

stringObject.charCodeAt(index)

charCodeAt()方法可返回指定位置的字符的Unicode编码。charCodeAt()方法与charAt()方法类似,都需要传入一个索引值作为参数,区别是前者返回指定位置的字符的编码,而后者返回的是字符子串。

var str = 'abcde';
console.log(str.charCodeAt(
0)); //返回97

(3) fromCharCode()

String.fromCharCode(numX,numX,…,numX)

fromCharCode()可接受一个或多个Unicode值,然后返回一个字符串。另外该方法是String 的静态方法,字符串中的每个字符都由单独的数字Unicode编码指定。

String.fromCharCode(97, 98, 99, 100, 101) //返回abcde

2.查找类方法

(1) indexOf()

stringObject.indexOf(searchvalue,fromindex)

indexOf()用来检索指定的字符串值在字符串中首次出现的位置。它可以接收两个参数,searchvalue表示要查找的子字符串,fromindex表示查找的开始位置,省略的话则从开始位置进行检索。

var str = 'abcdeabcde';
console.log(str.indexOf(
'a')); // 返回0
console.log(str.indexOf('a', 3)); // 返回5
console.log(str.indexOf('bc')); // 返回1

(2) lastIndexOf()方法

stringObject.lastIndexOf(searchvalue,fromindex)

lastIndexOf()语法与indexOf()类似,它返回的是一个指定的子字符串值最后出现的位置,其检索顺序是从后向前。

var str = 'abcdeabcde';
console.log(str.lastIndexOf(
'a')); // 返回5
console.log(str.lastIndexOf('a', 3)); // 返回0 从第索引3的位置往前检索
console.log(str.lastIndexOf('bc')); // 返回6

(3) search()方法

stringObject.search(substr)
stringObject.search(regexp)

search()方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。它会返回第一个匹配的子字符串的起始位置,如果没有匹配的,则返回-1。

var str = 'abcDEF';
console.log(str.search(
'c')); //返回2
console.log(str.search('d')); //返回-1
console.log(str.search(/d/i)); //返回3

(4) match()方法

stringObject.match(substr)
stringObject.match(regexp)

match()方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。

如果参数中传入的是子字符串或是没有进行全局匹配的正则表达式,那么match()方法会从开始位置执行一次匹配,如果没有匹配到结果,则返回null。否则则会返回一个数组,该数组的第0个元素存放的是匹配文本,除此之外,返回的数组还含有两个对象属性index和input,分别表示匹配文本的起始字符索引和stringObject 的引用(即原字符串)。

var str = '1a2b3c4d5e';
console.log(str.match(
'h')); //返回null
console.log(str.match('b')); //返回["b", index: 3, input: "1a2b3c4d5e"]
console.log(str.match(/b/)); //返回["b", index: 3, input: "1a2b3c4d5e"]

如果参数传入的是具有全局匹配的正则表达式,那么match()从开始位置进行多次匹配,直到最后。如果没有匹配到结果,则返回null。否则则会返回一个数组,数组中存放所有符合要求的子字符串,并且没有index和input属性。

var str = '1a2b3c4d5e';
console.log(str.match(
/h/g)); //返回null
console.log(str.match(/\d/g)); //返回["1", "2", "3", "4", "5"]

3.截取类方法

(1) substring()

stringObject.substring(start,end)

substring()是最常用到的字符串截取方法,它可以接收两个参数(参数不能为负值),分别是要截取的开始位置和结束位置,它将返回一个新的字符串,其内容是从start处到end-1处的所有字符。若结束参数(end)省略,则表示从start位置一直截取到最后。

var str = 'abcdefg';
console.log(str.substring(
1, 4)); //返回bcd
console.log(str.substring(1)); //返回bcdefg
console.log(str.substring(-1)); //返回abcdefg,传入负值时会视为0

(2) slice()

stringObject.slice(start,end)

slice()方法与substring()方法非常类似,它传入的两个参数也分别对应着开始位置和结束位置。而区别在于,slice()中的参数可以为负值,如果参数是负数,则该参数规定的是从字符串的尾部开始算起的位置。也就是说,-1 指字符串的最后一个字符。

var str = 'abcdefg';
console.log(str.slice(
1, 4)); //返回bcd
console.log(str.slice(-3, -1)); //返回ef
console.log(str.slice(1, -1)); //返回bcdef
console.log(str.slice(-1, -3)); //返回空字符串,若传入的参数有问题,则返回空

(3) substr()

站内搜索,不仅仅是搜索--兼谈产品研发历程与心得 - kwklover  阅读原文»

今年5月份,我研发的站内搜索引擎产品(为了避免广告嫌疑,具体名称就不说了)推出了第一个稳定的商业版,当然发展的还是比较缓慢的,但是坚持做好一个产品,还是会有所收获的,我写作本文,一是希望跟大家分享自己的心理历程和心得经验,二是希望跟做过技术产品的博友交流交流,如何做好一个产品。

一,坚持,无坚持不产品。

去年年底,我没事翻阅自己博客,发现好多年前,自己正在计划开发一个开源的OA系统,但由于各种原因,最后搁置了。随后,在一个偶然的时间,我整理自己的硬盘资料,又发现我多年前写的一个基于Lucene的搜索引擎框架,打开看了一下,架构逻辑非常清晰,心里想着,这么好的一个东西,放在硬盘也是垃圾,不如把他开源共享出去吧,后来还真的开源过一次,但后来我撤掉了,头脑发热完了,就没动力了,或许就成为了永远的1.0版,依然是硬盘的垃圾,差别从我一个的硬盘变成了N多个人的硬盘,前车之鉴,我把源码撤了,决定做商业产品。

想到马上就开干,注册了个域名,花几百块买了个免备案的香港空间,挂了一个discuz论坛,做SEO优化,开始推广自己的搜索引擎框架产品,不过,让人泄气的时候,好长一段时间,并无人问津,在计划放弃的时候,有一个人加QQ咨询了一下,一下子就提起劲头了,当然了人家并不需要一个框架,隔了好长一段时间,又来了第二个,当然了,第二个也没把产品推销出去,我心里就想,如果有第三个人咨询了产品,不管能否卖出去,我都决定好好把产品做下去,第三个人咨询后,我思考和总结了一下,做框架是没有市场的,于是转向做一个完整的站内搜索产品,当时的计划是不管有没有市场空间,起码能验证这个搜索框架的作用。

第一个版本推出后,我通过各种下载网站,把产品免费发布出去了,当然,这是一个很不完善的产品,就连最基本的搜索质量也不是很理想,直到有一个站长用了这套产品,他加了我QQ,说你的产品很好,但是还不是特别完善,后来聊聊家常,一来一往就熟了,这位站长的职业是一个文具店的小老板,因个人兴趣,业余搞了一个教学站,喜欢折腾各种互联网产品,对各种站内搜索产品都比较了解。聊过之后,深感惭愧,自己做站内搜索产品,竟然不如一个普通站长。于是以他的网站作为试点,免费给他做技术支持,他也很乐意帮我测试,反馈意见,真的,他的要求很高,比如排序,他经常拿百度说事,比如通过百度搜索他的网站,排序是如何的,你的产品排序是如何的,单个关键词和一个句子的搜索策略要如何等等,经过一段时间测试与深入开发,V1.1版本就成型了,第一个成熟稳定的版本,没多久V1.2版本发布,V1.3也已经在研发中。慢慢的,咨询的人也多了起来,需求也千奇百怪。

但是,真正愿意付费的并不多....

二,瓶颈,无瓶颈不发展

功能需求越来越多,说到付费就总有各种难处,加之站内搜索产品还是比较小众的产品,一是小站长并不在意,宁愿跳到百度,也不想用;二是有实力的公司,自己有开发人员专门定制搜索;三是有技术的团队有各种开源的搜索产品可用,为啥用一个商业不开源的产品呢?四,最后剩下哪一个夹心层的那一部分,能有多大空间呢?想着想着,就觉得这个产品真的没啥市场空间,费那么大劲干嘛?

想放弃的话,总能找到很多理由种放弃,但坚持下去的理由,则只有一个:不放弃!

下一步,如何发展呢,摆在面前,心里不是一般的纠结:

一是商业模式问题:免费,开源,定制等等。最后选择了基本功能免费,高级功能和定制付费的模式。根据最近的实践情况,只有定制,客户才真正愿意付费,产品卖不出去,产品卖不出去还有一个原因,后来才发现的,那就是免费版本已经够用了,附加功能却不是必须的,最近看了一个技术创业者写的一篇文章,从谷歌RSS关闭谈到产品的基本功能也是要付费的商业模式才是健康的,而不是所谓的增值付费,所以从V1.3版本开始,会着力改善搜索的基本功能,全商业的版本,不再推免费版。从最近的新咨询反馈回来的信息,我坚信这个方向是正确的,一是产品必须能解决大数据问题,二是基础功能要完善,而不是那些花俏的东西。能解决好这两个最基本的问题,则具备了商业价值,而附加功能可以通过定制实现,他并不是一个产品的核心。

二是外部竞争问题,比如各种市面上的开源搜索产品,内测中的阿里云的云搜索,百度的站内搜索产品,他们推出后,这种产品还有没有市场空间?这个是最大的问题,因为跟大公司竞争,无异于自寻思路,所以一定要走差异化的路线,除了需要更加完善的自定义功能,还要发掘出站内搜索的新价值,而不仅仅是搜索,仅仅是一个搜索框的话,那是大公司的领地,从市场反馈的信息,思量之后,我发现基于全文检索技术,可以发掘出很多其他的价值,比如相关文章,智能专题,Tag辅助系统,重复文章检测.....

总结起来就两点:

1,核心功能要完善,更智能,更个性化,做通用产品所不能做的事情,这就有了定制化的市场空间。

2,充分发掘站内搜索引擎的价值延伸点,做到站内搜索,不仅仅是搜索。

写到这些,又想了一句话,理想很丰满,现实很骨感,确实,规划再好,没有是去实践,则永远是一个美丽的梦想,只有去尝试了,突破了瓶颈,就会出现一片新的空间,现在的规划也才会成为未来的现实。

最后,相信园子里有挺多高手童鞋在默默做着牛逼的产品,分享出来,一起来探讨下,我等菜鸟,无知者无畏,自告奋勇开个头。

最后的最后,发这个到首页,还是有些忐忑的,如果‘园丁们’觉得不适合,请撤下首页,很抱歉,给你们添麻烦了。


本文链接:http://www.cnblogs.com/kwklover/p/3279103.html,转载请注明。

阅读更多内容

没有评论:

发表评论