2012-01-04 2 views
0

정규식을 사용하여 간단한 JavaScript 기반 WYSIWYG 편집기를 사용하여 html로 변환합니다.Javascript Regex 각 인스턴스의 서식 지정이 없습니다.

이 내가 뭔가를 굵게 **이 둘러싸인 텍스트로 변환

message = message.replace(/\*\*(.*)\*\*/g, "<b>$1</b>"); 

사용하고있는 자바 스크립트 변환 방법입니다. 문제는 모든 인스턴스에 대해 그렇게하지 않는다는 것입니다. 대신에 **의 첫 번째 인스턴스에서 마지막으로 않습니다.

그래서 **bold text** **bold text**

은 내가 할 수있는 나에게 ** 굵은 텍스트

<b>bold text* *bold text</b> 

대신 어떻게

<b>bold text</b> <b>bold text</b> 

굵은 텍스트를 제공합니다 그 (것)들을 함께 분류하기 대신에 각 인스턴스를 개조하기 위하여 설치하십시오?

+0

이 시도 :

\*\*([^\*]+)\*\* 

이의 문제를하지만, 그것은이 일치한다는 것입니다 '메시지 = message.replace을 (/ \ * \ * (. *?) \ * \ */g, "$ 1"); – lfxgroove

답변

2

당신은 욕심이 없다 할 .*?에 한정 기호를 변경해야

message = message.replace(/\*\*(.*?)\*\*/g, "<b>$1</b>"); 
//        ^
2

현재 정규식 가지 좋은이며, 이후, 첫 번째 별 2 개 후 모든 문자를 캡처 * 계속됩니다 정규식 아무것도 일치합니다. **의 마지막 발생을 발견 할 때까지 데이터를 먹습니다. 이것이 결국 당신이 가진 결과를 얻는 이유입니다.

message = message.replace(/\*\*(.*?)\*\*/g, "<b>$1</b>"); 

이 조금 :

로 교체 시도? regex는 두 개의 별이 처음 나타날 때 멈출 것임을 의미합니다. 아니면 같은 것을 할 수있는 :

message = message.replace(/\*\*([A-Za-z0-9_- ]+)\*\*/g, "<b>$1</b>"); 
1

문제는 (.*) 모든 것을 캡처 것입니다. 이것은 당신의 문제를 해결해야합니다 **fjffj**을하지만이 : **ffff*gggg**