2011-11-29 4 views
2

나는 자바 스크립트로 작업 중이므로 jsfiddle을 만들었습니다.자바와 관련된 문제

두 개의 텍스트 필드가 있습니다. 하나는 사용자 입력을 포함하고 다른 하나는 결과를 포함합니다. 내 문제는 내가 같은 단어를 두 번 입력하면 그 중 하나만 바뀌게된다는 것입니다.

예를 들어, 첫 번째 텍스트 필드에 "going,going"을 입력하면 결과는 "GNG,GNG"이 아닌 "GNG,going"입니다. 내 코드에서 내가 뭘 잘못하고 있니?

HTML :

<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
    <title>Scrolling DIV demo on iPhone/iPod Touch/Android/iPad</title> 
</head> 
<body> 
    <input type="text" id="first_text" value="going, used to, to do fast, as soon as possible"/> 
    <input type="text" id="second_text"/> 
    <input type="button" onclick="replaceText()" value="Click!"/> 
</body> 
</html> 

자바 스크립트 :

var replaceText = function() { 
    var inputval = document.getElementById('first_text').value; 
    var arr = { 
     "going": "GNG", 
     "used to": "UD", 
     "as soon as possible": "ASAP", 
     "to do fast": "tdf" 
    } 

    for(var key in arr) { 
     if (typeof (arr[key]) !== "undefined") inputval = inputval.replace(key, arr[key]) 
    } 
    document.getElementById("second_text").value = inputval; 
} 
+2

내가 답변의 모든 열쇠를 가정 있습니다 싶습니다 특수 문자를 포함하지 마십시오 (이 경우). 특수 문자를 추가하면 문자 앞에''\\''로 이스케이프 처리해야합니다. – pimvdb

답변

3

변경 :

inputval = inputval.replace(key, arr[key]) 

사람 :

inputval = inputval.replace(new RegExp(key, 'g'), arr[key]) 

replace 기능과 정규 표현식은 기본적으로, 즉 g 스위치가하는 일의 글로벌되지 않습니다. 여기 예를 들어 작업 : http://jsfiddle.net/NSy8P/1/

5

사용 즉 inputval.replace(RegExp(key,"g"), arr[key]) , 당신은 key 값 'g [lobal]'그것에 modifier을 추가에서 정규 표현식을 만들 수 있습니다.

1

만 교체하면 패턴의 선두로부터 대체합니다. 더 많이 바꾸려면 코드의 regexp 버전을 사용해야합니다.

여전히 (대신 직접 정규 표현식 패턴을 사용하도록 다시 작성) 동일한 코드를 유지하려는 경우

'going, going'.replace(/going/g, 'Go'); // 'Go, Go' 

당신은 dinamically 문자열에서 정규 표현식을 만들 수 있습니다 ("글로벌 대체"에 대한 서 "g"를 참고)

var pattern = new RegExp('going', 'g'); 

하지만 패턴에 정규식 특수 문자가 없어야합니다. 당신은 키, 괄호 또는 백 슬래시와 같은 특수 문자를 사용할 수 있도록하려면 다음처럼 탈출 기능이 필요합니다

function regex_escape(str){ 
    return str.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1'); 
} 

var pattern = new RegExp (regex_escape(key), 'g');