JS는 C# 문자열 형식 지정 작업을 시뮬레이션합니다
/*** ** 功能: 字符串格式化替换操作 ***/ String.prototype.format = function () { var args = arguments; return this.replace(/\{(\d+)\}/g, function (m, i) { return args[i]; }); }
js는 C#과 유사한 문자열 처리 함수 format()을 구현합니다.
C#에 익숙한 분들은 format()과 같은 메소드가 있다는 것을 아실 겁니다. 이를 흉내내어 JavaScript로 구현해 보겠습니다.
코드 예시는 다음과 같습니다.
String.prototype.format=function(args){ if(arguments.length>0){ var result=this; if(arguments.length==1&&typeof(args)=="object"){ for(var key in args){ var reg=new RegExp("({"+key+"})","g"); result=result.replace(reg, args[key]); } } else{ for(var i=0;i<arguments.length;i++){ if(arguments[i]==undefined){ return ""; } else{ var reg=new RegExp ("({["+i+"]})","g"); result = result.replace(reg, arguments[i]); } } } return result; } else{ return this; } } var fistStr="{0}欢迎您,希望大家能够得到想要的{1}"; var secondStr="{webName}欢迎您,希望大家能够得到想要的{favoriate}"; var firstOut=fistStr.format("","东西"); var secondOut=secondStr.format({webName:"",favoriate:"东西"}); console.log(firstOut); console.log(secondOut);
위의 코드는 우리가 원하는 효과를 달성합니다. 구현 과정을 소개합니다.
1. 구현 원칙:
원리는 비교적 간단합니다. 자세한 내용은 코드 주석을 참조하세요. 정규식을 사용하여 바꿀 문자열을 찾은 다음 이 문자열을 지정된 콘텐츠로 바꿉니다. 코드에서 지정된 콘텐츠 중 일부는 문자열 리터럴이고 일부는 개체 특성 값입니다.
2. 코드 주석:
1.String.prototype.format=function(args){{}), 프로토타입 객체를 통해 String 객체에 인스턴스 메소드 형식을 추가합니다. 이 메소드는 문자열을 처리하는 데 사용됩니다.
2.if(arguments.length>0), 전달된 매개변수 수가 0보다 큰 경우.
3.var result=this, this의 참조를 변수 result에 할당합니다.
4.if(arguments.length==1&&typeof(args)=="object"), 전달된 매개변수가 객체 리터럴인지 확인하는 데 사용됩니다.
5.for(var key in args), 객체 리터럴의 속성을 탐색합니다.
6.var reg=new RegExp("({" key "})","g"), 지정된 문자열을 일치시키는 데 사용됩니다.
7.result=result.replace(reg,args[key]), 일치하는 문자열을 속성 값으로 바꿉니다.
8.else{}, 전달된 내용이 객체 리터럴이 아닌 경우.
9.for(var i=0;i
10.if(arguments==undefine), 정의되지 않은 경우 빈 문자열을 반환합니다.
11.var reg=new RegExp("({[" i "]})","g"), 지정된 문자열을 일치시키는 데 사용됩니다.
12.result=result.replace(reg,arguments), 바꾸기.
13.결과 반환, 대체된 문자열을 반환합니다.
14.return 이것을, 매개변수가 전달되지 않으면 문자열 자체가 반환됩니다.