2014-12-14 7 views
1

전체 단어 만 바꾸려고하고 있지만 대본의 모든 문자를 대용 할 수 있습니다. 위의 결과는 "B의 BAT 고양이"를 표시,하지만 내가 기대하고있어 "B 고양이 고양이"입니다 예에서단어가 아닌 전체 단어 만 바꾸기

<script> 

function repl() { 

var lyrics = document.getElementById('Lyricstuff').value; 
var find = document.getElementById('rs1').innerHTML; 
var spantag = document.getElementById('rt1').innerHTML; 
var regex = new RegExp(find, "g"); 

document.getElementById('Results').value = lyrics.replace(regex, spantag) ; 

} 

</script> 
<textarea id="Lyricstuff" cols="60" rows="10">C CAT cat</textarea> 
<button onclick="repl()">Replace</button> 
<textarea id="Results" cols="60" rows="10"></textarea> 
<span id="rt1">B</span><span id="rs1">C</span> 

: 여기 내 코드입니다. 나는이 질문을 찾고 관련이있는 것을 찾을 수 없었다.

누군가 저를 도와 줄 수 있습니까? 어떤 도움을 주셔서 감사합니다. 내가 여기에 바이올린을 포함했다

: http://jsfiddle.net/1z8f7b23/

+1

당신의 JS 바이올린 파산 –

+1

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/ ([워드 boundarties]을 검색합니다 Regular_Expressions # special-word-boundary) http://jsfiddle.net/1z8f7b23/1/ – mstoppert

답변

10

만, 당신은 \b 앵커 (워드 경계)로 검색 식을 둘러싸고 수 있습니다 전체 단어를 검색합니다.

단어 경계는 \w과 [\W 또는 문자열의 시작/끝] 사이의 임의의 위치입니다. 즉, 한 문자가 [a-zA-Z0-9_]과 일치하지만 다른 문자는 일치하지 않는 문자 사이에서 일치합니다. # 문자가 \w에 있지 않기 때문에


당신이 C#을 바꾸려면

function repl() { 
 
    var lyrics = document.getElementById('Lyricstuff').value; 
 
    var find = document.getElementById('rs1').innerHTML; 
 
    var spantag = document.getElementById('rt1').innerHTML; 
 
    var regex = new RegExp('\\b' + find + '\\b', "g"); 
 

 
    document.getElementById('Results').value = lyrics.replace(regex, spantag) ; 
 
}
<textarea id="Lyricstuff" cols="60" rows="4">C CAT cat</textarea> 
 
<button onclick="repl()">Replace</button> 
 
<textarea id="Results" cols="60" rows="4"></textarea> 
 
<span id="rt1">B</span><span id="rs1">C</span>

, 당신은 더 이상 \b을 사용할 수 없습니다. 자신의 어설 션 버전을 제공해야합니다. 이것은 JS가 lookbehinds를 지원하지 않기 때문에 단어의 끝 부분에서는 간단하지만 단어의 시작 부분에서는 쉽지 않습니다. 단어의 끝 부분에

  • 사용 (?=\s|$) 대신 \b : 그래서 당신은 해결 방법을 사용해야합니다.
  • 단어 시작 부분에 (\s|^)을 사용하십시오.하지만 대체 단어로 유지해야합니다. 이것은 (?<=\s|^) lookbehind에서 더 쉬울 것이지만 JS에서는 지원되지 않습니다.
  • 또한 (?: ... ) 그룹에 동사를 묶는 것이 좋습니다. 검색 패턴은 정규식 될 운명되지 않은 경우
  • 일치하지 않을 C$ 같은

    find = find.replace(/[-\\()\[\]{}^$*+.?|]/g, '\\$&'); 
    

    그렇지 않으면 검색 문자열을 탈출해야합니다.

function repl() { 
 
    var lyrics = document.getElementById('Lyricstuff').value; 
 
    var find = document.getElementById('rs1').value; 
 
    var spantag = document.getElementById('rt1').value; 
 

 
    // I don't know if you want this or not... 
 
    find = find.replace(/[-\\()\[\]{}^$*+.?|]/g, '\\$&'); 
 

 
    var regex = new RegExp('(\\s|^)(?:' + find + ')(?=\\s|$)', "g"); 
 

 
    document.getElementById('Results').value = lyrics.replace(regex, "$1" + spantag); 
 
}
<textarea id="Lyricstuff" cols="60" rows="4">This is C# and this is C#m</textarea> 
 
<button onclick="repl()">Replace</button> 
 
<textarea id="Results" cols="60" rows="4"></textarea><br/> 
 
<input id="rs1" value="C#"/><input id="rt1" value="1"/>

+0

완벽한 단어! 이것은 내 코드와 잘 작동하는 것 같다. 도움을 많이 주셔서 고마워요. – Sudhin

+0

그러나 C#을 작성하면 오류가있는 것 같습니다. 내가 사용할 수있는 유일한 추가 문자는 # 기호입니다. 이 문제를 해결할 방법이 있습니까? – Sudhin

+0

@Sudhin C# 코드 (및 입력)를 게시하여보고 볼 수 있도록하십시오. –

관련 문제