2013-05-26 2 views
0

다음 작업을 수행합니다. 두 개의 텍스트 영역 T1 및 T2가있는 웹 페이지를 작성하십시오. 사용자는 텍스트 영역 T1에 문자열을 입력하여 정규 표현식을 표시합니다. 그런 다음 사용자는 텍스트 영역 T2에 텍스트를 입력합니다. 코드는 T1의 정규 표현식과 일치하는 강조 표시된 요소가있는 T2 텍스트를 출력해야합니다. 내 작업에 대한 추가 요구 사항은 마지막 발생 만 일치시키는 것입니다. 이것은 내가 지금까지 무엇을 가지고정규 표현식에서 마지막으로 마킹되는 JavaScript 표시

: 마지막으로 할 말은 "LY"로 끝나는 경우

<script> 

var str = "This is really cooly"; 
str = str.replace(/\ly(?=[^\ly]*)$/, "BA"); 

document.write(str + '<br>'); 

</script> 

하지만 이것은 단지 일치합니다.

나는 처음 발생했을 때만 양식으로이를 처리했다.

<html> 
<body> 

<p id="demo">Click the button to display the matches.</p> 
<form name="My_form" id="My_form"> 
T1:<input type="text" name="T1" id="T1" size=200> 
<br> 
T2:<input type="text" name="T2" id="T2" size=200> 

</form> 
<br> 
<button onclick="myFunction()">Try it</button> 

<script type="text/javascript"> 
function myFunction() 
{ 
    var regex = document.My_form.T1.value; 
    var n = regex.match(document.My_form.T2.value); 
    var result = regex.replace(n, '<b>$&</b>'); 
    document.getElementById('demo').innerHTML = result; 
} 
</script> 

</body> 
</html> 

나는 그것이 가능하다조차 확실하지 오전 (정규 표현식으로 검색 전자 패턴에 사용자 입력을 변환하는 방법을 모르겠어요.이 일주일 이상 나는 내 머리를 불타는 이 작업을 완료하는 데 24 시간 이내에 있습니다.

+0

스택 오버플로는 일반적으로 숙제 질문에 매우 수용성하지 않습니다에 대한 많은 :

여기 내 전체 코드입니다.그냥 아시다시피 :) – Undo

+3

여기 대부분의 질문은 숙제와 관련된 내용입니다. regexp와 관련된 질문을 확인한 후에이 인상을 받았습니다. 사실은 내가 거짓말하지 않는다는 것과 나는 왜 이것이 전부인지를 숨기고 있지 않다는 것입니다. :) – Terrax

답변

0

감사합니다. 이는 도움이되었지만 문자열 조작 알고리즘이라고 생각하여 작업 요구 사항을 다루고 있는지 확신 할 수 없습니다.

방금 ​​작업을 완료했습니다. 내 실수는 replace() 함수에서 표현식을 일치 시키려고했다는 것입니다. 문제는 실제로 RegExp 객체로 직접 표현식을 만들어야한다는 것입니다.

다시 한번
var regex = new RegExp(document.My_form.T2.value+"(?!.*"+document.My_form.T2.value+")", 'g'); 
var result = document.My_form.T1.value.replace(regex, '<b><font color="blue">$&</font></b>'); 
document.getElementById("display").innerHTML=result; 

, 당신의 도움을 주셔서 감사합니다 :)

0

을 사용자가 정규 표현식을 제시하는 텍스트 영역 T1에 문자열을 입력합니다.

을 정말 정규 표현식 경우, 당신이 할 수 있습니다 try-catch 일반 예외를 먹일 때 throw 된 예외 입력이 유효하지 않은 경우에는 RegExp constructor으로 변경하십시오. 나는 구분 기호와 플래그없이 정규식이 입력되었다고 가정합니다.

실제로 T2에서 T1을 찾으라는 요구가있는 경우 String.indexOf 함수를 사용하여 문자열을 검색 할 수 있습니다.

코드는 T1의 정규 표현식과 일치하는 강조 표시된 요소가있는 T2 텍스트를 출력해야합니다. 내 작업에 대한 추가 요구 사항은 마지막 발생 만 일치시키는 것입니다.

텍스트를 강조 표시하려면 일치 항목 색인이 필요합니다.

RegExp 인스턴스의 생성시 g (글로벌) 플래그를 생성자에 전달합니다. 그런 다음 루프에서 RegExp.exec을 사용하여 정규 표현식에 따라 모든 일치 항목의 색인과 길이를 확인할 수 있습니다.

var regex, 
    arr, 
    output; 

try { 
    regex = new RegExp(inputT1, 'g'); 
} catch (e) { 
    console.log("Invalid regular expression"); 
} 

while ((arr = regex.exec(inputT2)) !== null) { 
    // Starting index of the match 
    var startIndex = arr.index; 

    // Ending index of the match 
    var endIndex = arr.index + arr[0].length; 

    // If you only want to highlight the last occurrence only, it can be done by 
    // storing the result of previous call to RegExp.exec, then process it 
    // outside the loop. 

    // Hope you can figure out the rest 

    // Advance the lastIndex if an empty string is matched 
    if (arr[0].length == 0) { 
     re.lastIndex += 1; 
    } 
}