Javascript语言精粹之String常用方法分析
Javascript语言精粹之String常用方法分析
1. String常用方法分析
1.1 String.prototype.slice()
slice(start,end)方法复制string的一部分来构造一个新的字符串
start<0时,它将于string.length相加
end参数可选,默认值为string.length。如果end<0,它将于string.length相加
var text='and in it he say " Any damn fool could';
var a=text.slice(18);
//a 是 '" Any damn fool could'
var b = text.slice(0,3);
//b 是 'and'
var c = text.slice(-5);
//c 是 'could'
1.2 String.prototype.substring()
substring方法不能处理负数参数
javascript语言精粹作者不建议使用substring,建议用slice
对于substring()、slice()、substr(),这里有篇文章有详细的对比
http://www.cnblogs.com/ider/p/js-slice-vs-substr-vs-substring-table.html
摘一下文中的结论
三个方法之间的主要区别如下:
1. 三个方法的参数1都代表子串开始位置,参数2在slice和substring中表示结束位置,而在substr中代表的则是子串长度;
2. 对于负数态度,当出现在参数1的位置时,slice和substr从末尾开始计算,而substring不支持末尾计数法直接视为0;当出现在参数2位置时,slice和substring的处理同参数1:前者从末尾开始计算,后者转换成0,而substr则视负数长度为0返回空串;
3. 对于参数1大于参数2的情况,substring最大的不同在于它会交换两个参数再截取子串,substr因第二参数表示的是长度因此并无异常,slice曽依然正常搜寻子串始末位置,若开始位置在结尾后边则返回空串。
1.3 String.prototype.match()
string.match方法匹配一个字符串和一个正则表达式。它依据g标识来判断怎样匹配,如果没有g标识,则string.match(regexp)和调用regexp.exec(string)结果相同。如果有g标识,它返回一个包含了除捕获分组之外的所有匹配的数组。注意,捕获组不包含的。
var text='<html><body bgcolor=linen><p>This is <b>bold<\/b>!<\/p><\/body><\/html>';
var tags=/[^<>]+|<(\/?)([A-Za-z]+)([^<>]*)>/g;
var a=text.match(tags); a=["<html>", "<body bgcolor=linen>", "<p>", "This is ", "<b>", "bold", "</b>", "!", "</p>", "</body>", "</html>"]
string.match和RegExp.exec区别
var someText="web2.0 .net2.0";
var pattern=/(\w+)(\d)\.(\d)/g;
var outCome_exec=pattern.exec(someText);
var outCome_matc=someText.match(pattern);
//outCome_exec:["web2.0", "web", "2", "0"]
//outCome_matc:["web2.0", "net2.0"] var someText="web2.0 .net2.0";
var pattern=/(\w+)(\d)\.(\d)/; //不带g
var outCome_exec=pattern.exec(someText);
var outCome_matc=someText.match(pattern);
//outCome_exec :["web2.0", "web", "2", "0"]
//outCome_matc: ["web2.0", "web", "2", "0"]
1)exec是RegExp对象方法,match是String对象方法;
2)如果没有找到结果,则二者都返回null;
3)只有在正则表达式必须指定全局g属性时,match才能返回所有匹配,否则match与exec方法结果无差异,是等价的;
4)exec永远返回与第一个匹配相关的信息,其返回数组第一个值是第一个匹配的字串,剩下的是所有分组的反向引用(即子括号的匹配内容);
5)exec在设置g属性后,虽然匹配结果不受g的影响,返回结果仍然是一个数组(第一个值是第一个匹配到的字符串,以后的为分组匹配内容),但是会改变index和lastIndex等的值,将该对象的匹配的开始位置设置到紧接这匹配子串的字符位置,当第二次调用exec时,将从lastIndex所指示的字符位置开始检索。同样match方法在设置了g属性后,也会改变index和lastIndex的值,但是是一次性的。无法像exec那样能逐过程累积(即将结果放入Matches 集合中去了),因此无法累积获取下一次检索的位置。
1.4 String.prototype.replace
replace(searchValue,replaceValue)方法对string进行查找和替换的操作,并返回一个新的字符串。
当searchValue是字符串时,searchValue仅在第一次出现的位置被替换
var result="mother_in_law".replace('_','-');
result="mother-in_law";
当searchValue是一个正则表达式并且带有g标识,它将替换所有匹配;如果没有g标识,仅将替换第一个匹配
var oldareacode=/\((\d{3})\)/g;
var p='(555)666-(121)2'.replace(oldareacode,'$1-');
p = "555-666-121-2";
当replaceValue是一个函数时,此方法对每一个匹配调用它,将该函数返回的字符串用作替换文本。
var p="1a1c".replace(/\d/g,function(){
return 'X';
});
p="XaXc";
如果replaceValue函数需要更复杂的处理逻辑,可以为该函数传入参数,第一个参数是整个被匹配的文本,第二个参数是分组1捕获的文本,第二个参数是分组2捕获的文本,以此类推
//将一个句子的所有单词首字母大写
var result="hello world".replace(/(\w)\w*\b/g,function(a,b){
return b.toUpperCase()+a.slice(1);
}); result="Hello World"
书中一个简易的html转义方法
String.prototype.entityify=function(){
var character={
'<':'<',
'>':'>',
'&':'&',
'"':'"'
};
return function(){
return this.replace(/[<>&"]/g,function(c){
return character[c];
});
};
}();
alert("<&>".entityify());//<&>
1.5 String.prototype.split()
string.split(separator,limit)方法把string分割成片断来创建一个字符串数组。
可选参数limit可以限制被分割的片断数量。separator参数可以是一个字符串或一个正则表达式
如果separator是一个空字符串,将返回一个单字符的数组:
var digits='0123456789';
var a=digits.split('',5);
a=["0", "1", "2", "3", "4"]
如果separator非空,split会查找所有separator出现的地方
var c = 'a|b|c|'.split('|');
c=['a','b','c',''];
如果split参数为正则表达式
var text='last, first ,middle';
var res=text.split(/\s*,\s*/); res=["last", "first", "middle"]
如果split参数为正则表达式,来自捕获组的文本将被包含在分割后的数组中
var text='last, first ,middle';
var res=text.split(/\s*(,)\s*/); res=["last",",","first",",","middle"]
1.6 String.prototype.search()
search方法和indexOf方法类似,只是它接受一个正则表达式作为参数而不是一个字符串
如果找到匹配,它返回第一个匹配的首字符位置,如果没有找到匹配,返回-1
Javascript语言精粹之String常用方法分析的更多相关文章
- Javascript语言精粹之Array常用方法分析
Javascript语言精粹之Array常用方法分析 1.Array常用方法分析 1.1 Array.prototype.sort() Javascript的默认比较函数假定被排序元素都是字符串,所以 ...
- 《JavaScript语言精粹》小记
一.前言 以下内容均摘自<JavaScript语言精粹>一书,本人在读这本书时,发现作者诠释JavaScript很犀利,特别是数组部分,固记录下来,想和大家分享下. 随笔主要包含两大部分: ...
- javascript语言精粹
内容选自:<javascript语言精粹> 1.6种值会为假(==false),分别是false,null,undefined,' ',0,NaN 2.typeof有6种值,分别是'num ...
- Javascript 语言精粹 代码片段合集
Javascript 语言精粹 代码片段合集 标签:Douglas-Crockford Javascript 最佳实践 原文链接 更好的阅读体验 使用一个method 方法定义新方法 Function ...
- Javascript语言精粹之正则表达式知识整理
Javascript语言精粹之正则表达式知识整理 1.正则表达式思维导图 2.正则表达式常用示例 2.1 移除所有标签,只留下innerText var html = "<p>& ...
- 《JavaScript语言精粹》【PDF】下载
<JavaScript语言精粹>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382204 内容简介 javascript曾是&q ...
- JavaScript语言精粹 笔记06 方法
JS包含了少量可用在标准类型上的标准方法. ArrayFunctionNumberObjectRegExpString Array array.concat(item...) concat方法返回一个 ...
- JavaScript语言精粹 笔记05 正则表达式
正则表达式 正则表达式以方法的形式被用于对字符串中的信息进行查找.替换画图提取操作.可处理正则表达式的方法有:regexp.exec, regexp.test,string.match, string ...
- JavaScript语言精粹 笔记04 数组
数组1 数组字面量2 长度3 删除4 列举5 混淆的地方6 方法7 维度 数组1 数组字面量 var empty = []; var numbers = [ 'zero', 'one', 'two', ...
随机推荐
- org.apache.jasper.JasperException: java.lang.ClassCastException
异常信息: org.apache.jasper.JasperException: java.lang.ClassCastException:org.apache.catalina.util.Defau ...
- android图片压缩的3种方法实例
android 图片压缩方法: 第一:质量压缩法: private Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = ...
- Introduction to Probability (三) Independence
两个事件独立性的定义是:事件A的发生对事件B的发生毫无影响,即从A的发生与否.我们不能猜測出B是否发生. 从概率等式的表示来看就是B在A发生的情况下发生的概率等于B发生的概率本身. 进而引出了A与B同 ...
- vs2005及以上版本的程序分发问题
我们使用vs2005及以上版本编译的应用程序(C/C++),在客户机器运行时,会出现: “由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题” 那么,我们怎么解决这个问题呢 ...
- 使用visual c++ 2005远程调试64位系统上32位与64位程序
一直都挺喜欢使用visual c++远程调试代码,它能展现给我们当时代码执行最真实的情景,今天有时间记录一下,以免以后忘了. 远程调试需要在被调试端安装服务器,对于visual c++ 2005来说调 ...
- ajax+jsp实现三级联动下拉框
js文件sjld.js : $(document).ready( function(){ $.ajax({ url:"bindZ", type:"get", ...
- 深刻:截获windows的消息并分析实例(DefWindowProc),以WM_NCHITTEST举例(Windows下每一个鼠标消息都是由 WM_NCHITTEST 消息产生的,这个消息的参数包含了鼠标位置的信息)
1,回调函数工作机制 回调函数由操作系统自动调用,回调函数的返回值当然也是返回给操作系统了. 2,截获操作系统发出的消息,截获到后,将另外一个消息返回给操作系统,已达到欺骗操作系统的目的. 下面还是以 ...
- SPOJ DISUBSTR(后缀数组)
传送门:DISUBSTR 题意:给定一个字符串,求不相同的子串. 分析:对于每个sa[i]贡献n-a[i]个后缀,然后减去a[i]与a[i-1]的公共前缀height[i],则每个a[i]贡献n-sa ...
- 第 3 章 编写 PAM 应用程序和服务
Solaris 开发者安全性指南 Previous: 第 2 章 开发特权应用程序 Next: 第 4 章 编写使用 GSS-API 的应用程序 第 3 章 编写 PAM 应用程序和服务 可插拔验证模 ...
- Linux段管理,BSS段,data段,.rodata段,text段
近期在解决一个编译问题时,一直在考虑一个问题,那就是Linux下可执行程序执行时内存是什么状态,是依照什么方式分配内存并执行的.查看了一下资料.就此总结一下,众所周知.linux下内存管理是通过虚存管 ...