2016-06-28 3 views
2

사용자 입력을 전처리하여 3 개의 틱으로 시작하는 입력의 각 줄에 참조 코드가 잘리고 모든 공백이 밑줄로 바뀌도록 사용자 정의 마크 다운 파서를 작성했습니다. 이 바이올린에까다로운 자바 스크립트 정규식 바꾸기

var e = document.getElementById("thetext"); 
 
var feedback = document.getElementById("feedback"); 
 

 
var sorted = function(haystack) { 
 
    var re = /$```\s*(\S+)(\s+)(\S+)\s*$/g; 
 
    return haystack.replace(re, '```$1_$3'); 
 
}; 
 

 
e.addEventListener("blur", function(event) { 
 
    feedback.innerHTML = sorted(e.value); 
 
}, true);
textarea { width: 400px; height: 400px;}
<textarea id="thetext"> 
 
A custom block code marker with reference: 
 

 
``` John 3:16 
 
For God so loved the world 
 
``` 
 

 
another one with two spaces to be replaced: 
 

 
```1 Cor 2:15-45 
 
Some other marked up text followed by white space 
 
``` 
 

 
</textarea> 
 
<pre id="feedback">Tab out to see result</pre>

출력이 정확히이 두 줄을 제외하고 입력과 같이해야합니다 그래서 :

 
```John_3:16 

 
```1_Cor_2:15-45 

답변

3

까다로운 대체 기능은 콜백 기능을 사용하여 가장 쉽게 수행됩니다. the`m` 스위치를 지적

var thetext = document.getElementById("thetext"); 
 
var feedback = document.getElementById("feedback"); 
 

 
var sorted = function(haystack) { 
 
    var re = /^```(.*)/gm; 
 
    return haystack.replace(re, function ($0, $1) { 
 
     return '```' + $1.trim().replace(/\s/g, '_'); 
 
    }); 
 
}; 
 

 
thetext.addEventListener("blur", function(event) { 
 
    feedback.textContent = sorted(this.value); 
 
});
textarea { width: 400px; height: 400px;}
<textarea id="thetext"> 
 
A custom block code marker with reference: 
 

 
``` John 3:16 
 
For God so loved the world 
 
``` 
 

 
another one with two spaces to be replaced: 
 

 
```1 Cor 2:15-45 
 
Some other marked up text followed by white space 
 
``` 
 

 
</textarea> 
 
<pre id="feedback">Tab out to see result</pre>

+1

'$ 1.replace (/^\ s + | \ s + $/g, '') .replace (/ \ s/g, '_')'** ==> **'$ 1.trim(). replace/\ s +/g, '_'); ' – Tushar

+1

@Tushar Nice. 분명히 나는 ​​너무 오래된 학교 다. – Tomalak

+0

와우! 콜백을 사용할 수 있는지 몰랐습니다. 훌륭한 소개에 감사드립니다. –

2

귀하의 정규식해야 다중 라인. ^ 및 $ 앵커는 이제 전체 문자열의 시작/끝 대신에 각 줄의 시작/끝에 각각 일치합니다.

/^```\s*(\S+)(\s+)(\S+)\s*$/gm; 
+0

감사합니다! –