JavaScript 공백 제거 방법 집합
7030 단어 공백 을 없애다
String.prototype.trim = function () {
return this .replace(/^\s\s*/, '' ).replace(/\s\s*$/, '' );
}
을 실현 하 는 것 은 그다지 좋 지 않 고 두 번 의 정규 교 체 를 동 원 했 는데 실제 속 도 는 매우 놀 라 웠 다.주로 브 라 우 저의 내부 최적화 덕분이다.Array 로 만 든 StringBuffer 보다 직접 붙 이 는 유명한 예 문자열base 2 라 이브 러 리 는 이러한 실현 을 사용 합 니 다.실현 2
String.prototype.trim = function () {
return this .replace(/^\s+/, '' ).replace(/\s+$/, '' );
}
와 실현 1 은 비슷 하지만 조금 느 린 이 유 는 가장 먼저 가설 에 적어도 공백 문자 가 존재 하기 때문이다.Prototype.js 는 이러한 실현 을 사용 하지만 이름 은 strip 입 니 다.Prototype 의 방법 은 모두 Ruby 와 동명 을 추구 하기 때 문 입 니 다.실현 3
String.prototype.trim = function () {
return this .substring(Math.max( this .search(/\S/), 0), this .search(/\S\s*$/) + 1);
}
은 캡 처 방식 으로 공백 부분(물론 중간 에 공백 문자 가 존재 하 는 것 을 허용)을 얻 고 모두 네 개의 원생 방법 을 호출 했다.매우 교묘 하 게 설계 되 었 고 substring 은 두 개의 숫자 를 매개 변수 로 한다.Math.max 는 두 개의 숫자 를 매개 변수 로 하고 search 는 하나의 숫자 를 되 돌려 줍 니 다.속 도 는 위의 두 개 보다 조금 느 리 지만 아래 의 대부분 보다 빠르다.4
String.prototype.trim = function () {
return this .replace(/^\s+|\s+$/g, '' );
}
를 실현 하 는 것 은 2 를 실현 하 는 간략화 판 이 라 고 할 수 있 는데 바로 후보 조작 자 를 이용 하여 두 개의 정규 를 연결 하 는 것 이다.그러나 이렇게 하면 브 라 우 저 최적화 의 기 회 를 잃 고 3 을 실현 하 는 것 보다 못 하 다.우아 해 보이 기 때문에 많은 라 이브 러 리 에서 사용 합 니 다.예 를 들 어 JQuery 와 mootools 가 5
String.prototype.trim = function () {
var str = this ;
str = str.match(/\S+(?:\s+\S+)*/);
return str ? str[0] : '' ;
}
match 를 실현 하 는 것 은 배열 을 되 돌려 주 는 것 이기 때문에 원래 문자열 이 요구 에 부 합 된 부분 이 요소 가 됩 니 다.문자열 사이 의 공백 문자 가 제거 되 는 것 을 방지 하기 위해 서 는 비 포획 적 그룹(?:exp)。배열 이 비어 있 을 수 있 기 때문에,우 리 는 뒤에서 진일보 한 판정 을 해 야 한다.브 라 우 저 는 그룹 을 처리 하 는 데 힘 이 없고 한 글자 가 느 린 것 같 습 니 다.그 러 니 정칙 을 믿 지 마라.비록 그것 은 기본적으로 만능 이지 만.6
String.prototype.trim = function () {
return this .replace(/^\s*(\S*(\s+\S+)*)\s*$/, '$1' );
}
을 실현 하여 요구 에 부합 되 는 부분 을 제공 하여 빈 문자열 에 넣 습 니 다.하지만 효율 이 떨어진다.특히 IE6 에 서 는.7
String.prototype.trim = function () {
return this .replace(/^\s*(\S*(?:\s+\S+)*)\s*$/, '$1' );
}
을 실현 하 는 것 과 6 을 실현 하 는 것 은 비슷 하지만 비 포획 으로 조 를 나 누 어 장점 을 가지 고 성능 효 과 를 약간 향상 시 켰 다.8
String.prototype.trim = function () {
return this .replace(/^\s*((?:[\S\s]*\S)?)\s*$/, '$1' );
}
을 실현 하고 위의 두 가지 사고방식 을 따라 개선 하 며 비 포획 그룹 과 문자 집합 을 사용 했다.대신특히 IE6 에 서 는 이번 성능 향상 을 미 친 듯 이 표현 해 화 호 를 직접 죽 일 수 있다.실현 9
String.prototype.trim = function () {
return this .replace(/^\s*([\S\s]*?)\s*$/, '$1' );
}
이번 에는 게 으 름 매 칭 으로 비 포획 조 를 나 누 어 불 여우 에서 개선 되 었 고 IE 는 지난번 처럼 미 치지 않 았 다.10
String.prototype.trim = function () {
var str = this ,
whitespace = '
\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000' ;
for ( var i = 0,len = str.length; i < len; i++) {
if (whitespace.indexOf(str.charAt(i)) === -1) {
str = str.substring(i);
break ;
}
}
for (i = str.length - 1; i >= 0; i--) {
if (whitespace.indexOf(str.charAt(i)) === -1) {
str = str.substring(0, i + 1);
break ;
}
}
return whitespace.indexOf(str.charAt(0)) === -1 ? str : '' ;
}
을 실현 하 는 것 은 이것 을 만 든 사람 은 이미 소 로 형용 하 는 것 이 아니 라 신 과 같은 등급 이 라 고 말 하고 싶 을 뿐이다.그것 은 먼저 가능 한 공백 부 호 를 모두 열거 하고 첫 번 째 달력 에서 앞의 공백 을 자 르 고 두 번 째 는 뒤의 공백 을 자 르 는 것 이다.전 과정 은 index Of 와 substring 이라는 문자열 을 처리 하기 위 한 네 이 티 브 방법 만 사 용 했 을 뿐 정규 에 사용 되 지 않 았 습 니 다.속도 가 놀 라 울 정도 로 빠 르 고 내부 의 바 이 너 리 실현 에 직면 할 것 으로 예상 되 며 IE 와 화 호(다른 브 라 우 저 는 물론 의심 할 여지 가 없다)에서 도 좋 은 모습 을 보 였 다.속 도 는 모두 0 밀리초 급 이다.11
String.prototype.trim = function () {
var str = this ,
str = str.replace(/^\s+/, '' );
for ( var i = str.length - 1; i >= 0; i--) {
if (/\S/.test(str.charAt(i))) {
str = str.substring(0, i + 1);
break ;
}
}
return str;
}
을 실현 하고 10 을 실현 하 는 것 은 일반적인 원생 문자열 을 캡 처 하 는 방법 이 정규 교체 보다 훨씬 복잡 하 다 는 것 을 알려 주 었 다.그러나 정규 가 너무 복잡 하지 않 으 면 우 리 는 브 라 우 저 를 이용 하여 정규 에 대한 최적화,프로그램의 집행 효율 을 개선 하고 8 이 IE 에서 의 표현 을 그대로 나 타 낼 수 있다.나 는 보통 프로젝트 에서 10 을 실현 하 는 사람 이 없 을 것 이 라 고 생각한다.왜냐하면 그 화이트 스페이스 는 너무 길 고 기억 하기 어렵 기 때문이다.11 을 실현 하 는 것 은 개선 판 이 라 고 할 수 있다.앞부분 의 공백 은 정규 교체 로 지우 고 뒤쪽 은 원생 방법 으로 처리 하 며 효 과 는 원판 못 지 않 지만 속 도 는 매우 역겹다.12
String.prototype.trim = function () {
var str = this ,
str = str.replace(/^\s\s*/, '' ),
ws = /\s/,
i = str.length;
while (ws.test(str.charAt(--i)));
return str.slice(0, i + 1);
}
를 실현 하고 10 을 실현 하 며 11 을 실현 하 는 것 은 쓰기 에 있어 더욱 좋 은 개선 판 입 니 다.성능 속도 가 아니 라 기억 하기 쉽 고 사용 하기 쉽 습 니 다.그 와 의 두 선 배 는 모두 0 밀리초 급 이 었 고 앞으로 이 걸 로 일 하고 놀 랐 다.다음은 외국인 이 내 놓 은 비교 결과 입 니 다.실행 배경 은 Magna Carta 라 는 글(27,600 글자 초과)을 trim 으로 조작 하 는 것 입 니 다.Firefox 2 IE 6 trim 1 15ms<0.5ms trim 2 31ms<0.5ms trim 3 46ms 31ms trim 4 47ms 46ms trim 5 156 ms 1656 ms trim 6 172 ms 2406 ms trim 7 172 ms 1640 ms trim 8 281 ms<0.5ms trim 9 125 ms 78ms trim 10<0.5ms<0.5ms trim 11<0.5ms<0.5ms trim 12<0.5ms<0.5ms trim 12<0.5ms
//String.prototype
// , :str.ReplaceAll([/a/g,/b/g,/c/g],["aaa","bbb","ccc"])
String.prototype.ReplaceAll=function (A,B) {
var C=this;
for(var i=0;i<A.length;i++) {
C=C.replace(A[i],B[i]);
};
return C;
};
//
String.prototype.Trim=function () {
return this.replace(/(^[\t
\r]*)|([\t
\r]*$)/g,'');
};
//
String.prototype.LTrim=function () {
return this.replace(/^[\t
\r]/g,'');
};
//
String.prototype.RTrim=function () {
return this.replace(/[\t
\r]*$/g,'');
};
// , 2
String.prototype.ChineseLength=function()
{
return this.replace(/[^\x00-\xff]/g,"**").length;
};
//
String.prototype.EndsWith=function (A,B) {
var C=this.length;
var D=A.length;
if(D>C)return false;
if(B) {
var E=new RegExp(A+'$','i');
return E.test(this);
}else return (D==0||this.substr(C-D,D)==A);
};
//
String.prototype.StartsWith = function(str)
{
return this.substr(0, str.length) == str;
};
//
String.prototype.Remove=function (A,B) {
var s='';
if(A>0)s=this.substring(0,A);
if(A+B<this.length)s+=this.substring(A+B,this.length);
return s;
};