字符串和正则表达式
str="a"+"b"+"c";
str="a";
str+='b';
str+='c';
数组字符串方法
str=['a','b','c'].join("");
str='a';
str=str.concat('b','c');
数组链接join
在大多数浏览器上使用数组链接join
要比 链接字符串的其他的方法更慢。
测试一个5000次的字符串拼接
var str="I,m a super man",
newstr="",
strs=[],
appends=5000;
while (appends--){
newstr+=str;
}
console.log(newstr);
和join结合
var str="I,m a super man",
newstr="",
strs=[],
appends=5000;
while (appends--){
strs[strs.length]=str;
}
newstr=strs.join("");
console.log(newstr);
字符串链接concat
优点是接收任意数目的字符串;但是多数情况下他要比+和+=慢一些。
str=str.concat(s1);
str=str.concat(s1,s2,s3);
str=String.prototype.concat.apply(str,array);
正则
以下是基于正则表达式的修剪实例,去除左右两个空格
String.prototype.trim=function () {
return this.replace(/^\s+|\s+$/g,"");
}
通过分支功能合并了两个简单的正则表达式,并使用全局/g标记替换所有匹配,而不只是第一个(当目标字符串首尾都有空格时它将匹配两次)。但是对长字符串操作时,它比使用两个简单的字表达式要慢,因为两个分支选项都要测试每个字符的位置。
String.prototype.trim=function () {
return this.replace(/^\s*([\s\S]*?)\s*$/,"$1");
}
匹配整个字符串,捕获从第一个到最后一个非空格字符之间的序列,记入后向引入1,然后使用后向引入1替代整个字符串,就留下了这个字符串的修剪版本。
混合解决方案
用正则表达式修剪头部表格,用非正则表达式修剪尾部字符。
String.prototype.trim=function () {
var str=this.replace(/^s+/,""),
end=str.length-1,
ws=/|s/;
while (ws.test(str.charAt(end))){
end--;
}
return str.slice(0,end+1);
}
总结
- 数组链接是链接字符串比较慢的方法之一。使用简单的+/+=,可以避免产生不必要的中间字符串。
- 当链接数量巨大或链接尺寸巨大的字符串时,数组链接是一个比较好的方法。
- 回溯既是正则表达式匹配功能的基本的组成部分,又是正则表达式影响效率的常见原因。
- 回溯失控发生在正则表达式本应很快发现匹配的地方,因为某些特殊的匹配字符串动作,导致运行缓慢,甚至浏览器崩溃。避免此问题的技术包括:使邻近字元互斥,避免嵌套量词对一个字符串的相同部分多次匹配,通过重复利用前瞻操作的原子特性去除不必要的回溯。
- 虽然有很多方法来修正一个字符串,使用两个简单的正则表达式(一个用于去除头部空格,另一个用于去除尾部空格)提供了一个简洁、跨浏览器的方法,适用于不同内容长度的字符串。从字符串末尾开始循环查找第一个非空格字符,或者在一个混合应用中将此技术与正则表达式结合起来,提供了一个很好的替代方案,它很少受到字符串整体长度影响。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)