최근에 자바스크립트 정보를 확인해보니 함수가 발견되었습니다.
함수 형식
{
var args = 인수
var 패턴 = new RegExp("%([1-"args.length "])","g"); 🎜>return String (s).replace(pattern,function(word,index){
return args[index];
})
}
// test
window.onload = Alert(format ("그리고 %1은(는) 당신이 누구 %2인지 알고 싶어합니다 %3", "papers", "shirt", "wear"))
//그리고 신문사는 당신이 누구의 셔츠를 입었는지 알고 싶어합니다.
이런 종류의 함수를 가진 함수는 이전에도 Shell이나 Java에서 볼 수 있었지만, 이를 Javascript 함수에서 구현하는 방법은 매우 참신합니다. 참신함은 다음과 같습니다.
return String(s) .replace(pattern,function(word,index){
return args[index];
})
그러나 여기서 String 클래스의 바꾸기 사용법은 다음과 매우 다릅니다. 제가 평소에 사용하는 것과 마찬가지로 이전에 이런 바꾸기 함수를 작성해 두었습니다.
function myReplace(s)
{
return String(s).replace(/CJ[0-9]{2}/g,function(word){
return word = 'CJJK00';
});
}
//window.onload = Alert(myReplace('CJ9080,CJ8976,CJ12919,CJ8765'));///CJJK0080,CJJK0076,CJJK00919, CJJK0065
replace를 사용할 때 두 번째 매개변수가 함수이면 보통 첫 번째 매개변수만 사용하고 기본적으로 두 번째, 세 번째 또는 그 이상의 매개변수를 사용하는 사람을 봤습니다. 두 번째 매개변수에 대해서는 대체 매개변수가 몇 개인지, 그리고 함수에서 두 번째 매개변수를 사용할 때 각 매개변수의 의미는 무엇인지 알아보고 싶습니다.
다음은 제가 직접 작성한 대체 함수입니다.
function myReplaceFtn(s)
{
return String(s).replace(/CJ[0-9]{2}/g,function(word,index){
return word = ' CJJK00@' 인덱스 "@";
});
}
//window.onload = Alert(myReplaceFtn('CJ9080,CJ8976,CJ12919,CJ8765'));//CJJK00@0 @80 ,CJJK00@7@76,CJJK00@14@919,CJJK00@22@65
처음에는 함수 형식의 함수(워드,인덱스)가 정규식이어야 한다고 생각했습니다. 일치하는 문자열의 인덱스(%1의 인덱스는 1, %2의 인덱스는 2, %3의 인덱스는 3), 제가 작성한 함수의 두 번째 매개변수 인덱스는 의 인덱스가 아닙니다. 일치하는 문자열이지만 원래 문자열에서 일치하는 문자의 위치입니다. 아래에서는 다음과 같은 테스트를 했습니다.
함수 형식(들)
{
var args = 인수;
var 패턴 = new RegExp("%([1-"args.length "])","g"); (s) .replace(pattern,function(word,index){
alert("arguments.length:"args.length);//4
return args[index];
})
}
function myReplaceFtn(s)
{
return String(s).replace(/CJ[0-9]{2}/g,function(word,index){
alert ("arguments .length:"args.length);//3
return word = 'CJJK00@' index "@"
})
}
함수 함수 형식 내부에는 (단어, 색인)에 대한 4개의 매개변수가 있고, myReplaceFtn(s) 함수에는 함수(단어, 색인)에 대한 3개의 매개변수가 있습니다. 왜 그런 차이가 있습니까? 다음과 같은 테스트를 했습니다.
function newformat(s)
{
var args = 인수
var 패턴 = new RegExp("%([1-"args.length "])" ,"g") ;
return String(s).replace(pattern,function(word,index){
console.log("arguments.length:"args.length);
for (var i = 0,j = 인수.길이;i
{
console.log("mark newformat" i ":" 인수[i])
}
return args [색인];
});
}
function newmyReplace(s)
{
return String(s).replace(/CJ[0-9]{2}/g, function(word){
console.log("arguments.length:"args.length)
for (var i = 0,j =args.length;i{
console.log("mark newmyReplace" i ":" 인수[i])
}
return word = 'CJJK00'
});
결과:
arguments.length:4
Mark newformat0: %1
Mark newformat1: 1
Mark newformat2: 8
Mark newformat3: 그리고 %1은(는) 누구의 %인지 알고 싶어합니다. 2 당신은 %3
arguments.length:4
Mark newformat0: %2
Mark newformat1: 2
Mark newformat2: 30
Mark newformat3: 그리고 %1은(는) 누구 %2인지 알고 싶어합니다. 당신은 %3
arguments.length:4
mark newformat0: %3
mark newformat1: 3
mark newformat2: 37
mark newformat3: 그리고 %1은(는) 당신이 누구 %2인지 알고 싶어합니다. %3
arguments.length:3
newmyReplace0 표시: CJ90
newmyReplace1 표시: 0
newmyReplace2 표시: CJ9080,CJ8976,CJ12919,CJ8765
arguments.length:3
newmyReplace0 표시 : CJ89
Mark newmyReplace1: 7
Mark newmyReplace2: CJ9080, CJ8976, CJ12919, CJ8765
arguments.length: 3
Mark newmyReplace0: CJ12
Mark newmyReplace1: 14
Mark newmyReplace2 : CJ9080,CJ8976,CJ12919,CJ8765
arguments.length:3
Mark newmyReplace0: CJ87
Mark newmyReplace1: 22
Mark newmyReplace2: CJ9080,CJ8976,CJ12919,CJ8765
콜백 함수의 경우 는 인수 값은 이제 더 명확해졌습니다. 인수 개수의 차이는 우리가 작성한 정규식과 관련이 있어야 합니다. 어쨌든 첫 번째 매개변수는 일치하는 문자열이고, 마지막 매개변수는 원래 문자열이고, 두 번째 매개변수는 일치하는 문자열입니다. string은 원래 문자열 인덱스의 시작 위치에 있습니다. format의 두 번째 매개 변수 인덱스와 마찬가지로 상황에 따라 다릅니다. format의 인덱스 매개 변수는 %[1-4 ]입니다. , 1-4가 포함되어 있지만 확인 방법을 작성하십시오.
function charFormat(s)
{
var Pattern = new RegExp("%([a-d])","g")
return String(s).replace( 패턴,함수(단어,색인){
스위치(색인)
{
case 'a':
return 'thisisA'
case 'b':
return 'thisisB ';
case 'c':
return 'thisisC';
return 'thisisD'
return 'thisisNULL'; }
});
}
window.onload = console.log(charFormat("그리고 %a는 당신이 누구 %d인지 알고 싶어합니다 %b", "서류", "셔츠", "착용 ")) ;
//그리고 thisisA는 누구의 thisis인지 알고 싶습니다D 당신은 thisisB
String 대체가 꽤 강력하다는 것을 알 수 있지만 제 정규 표현식 기술이 충분하지 않습니다. 그 외에는 어떤 것이 있는지 모르겠습니다. 다른 특수 정규 표현식이 다른 결과를 생성합니까? 게다가 JavaScript에서 String 클래스를 대체하는 원래의 작성 방법을 가지고 있는 사람이 있는지도 모르겠습니다. 자세히 연구해보고 싶습니다.