2014-06-05 3 views
0

그래서 난이 다음 코드경기와 자바 스크립트 부분 문자열 문제를 대체

function format(){ 
    return arguments[0].replace(
     /%([0-9])/g, 
    function($1){alert($1)} 
    ) 

} 

var sql=format("SELECT * FROM %1 WHERE id='%2' ", table, id); 

var table= "table1"; 
var id = "F1542"; 

이 경고 "% 1"과 "% 2"그러나 나는이 코드를 실행하는 경우 : 내가 얻을

function format(){ 
    return arguments[0].replace(
     /%([0-9])/g, 
     "$1" 
    ) 

} 

var sql=format("SELECT * FROM %1 WHERE id='%2' ", table, id); 

alert(sql); 

을 "SELECT * FROM 1 WHERE id = '2'", 내 목표는 %를 사용하지 않고 일치 항목을 가져 와서 인수 배열 (즉, 인수 [$ 1])에 넣을 수 있지만 시도한 모든 것이 반환되었습니다. 인수 [% 1] 또는 인수 [% 2]을 (를) 찾는 것으로 보이는 '정의되지 않음'.

첫 번째 코드 집합이 잘못된 값을 반환하지만 두 번째 집합은 그렇지 않은 이유는 무엇입니까? 나는 $ 1, $ 2 등을 사용하여 부분 문자열 일치를 찾을 수 있다는 인상을 받았다.

추신 : 나는 이것을 아주 잘 설명하지 않았다면 미안하다.

답변

1

replace()은 일치하는 문자열이 아닌 수정 된 문자열을 반환합니다. 첫 번째 예에서는 함수를 매개 변수로 정의하고 발견 된 변수에 경고합니다. 당신은 단지 경기의 컬렉션을 얻을 수 match()을 사용할 수 있습니다, 또는 당신은 당신의 두 가지 예를 결합하는 경우는 다음과 같이 얻을 :

function format(){ 
    var args = Array.prototype.slice.call(arguments, 0); 
    var sql = args[0]; 
    return sql.replace(
     /%([0-9])/g, 
     function(matchVar,matchVal){ 
      return args[matchVal]; 
     }); 

} 

대체물 함수의 두 번째 매개 변수는 첫 경기의 일치 값입니다. 이 값을 인수 배열의 인덱스로 사용할 수 있습니다.

http://jsfiddle.net/N6S4Q/

+0

감사합니다. 하지만 여전히 "% 1"및 "% 2"변수를 반환하는 이유와 대체 "1"및 "2"반환하는 다른 이유는 이해가 안나요? – user3711899

+0

replace 함수의 첫 번째 매개 변수는 바꾸기를 시작하는 문자열입니다. 두 번째 매개 변수는 [첫 번째] 일치 항목을 포함하는 매개 변수입니다. – Malk

관련 문제