2013-06-02 8 views
6

mogę przekształcić ciąg #ff00fffirstword#445533secondword#008877thirdword doprzekształcić '# ff00fffirstword # 445533secondword # 008877thirdword' do formatu tagu HTML

<font color='#ff00ff'>firstword</font><font color='#445533'>secondword</font><font color='#008877'>thirdword</font> 

Korzystanie regexp w javascript lub ActionScript3 programie?

Próbowałem poniższy kod, ale to nie jest idealne (kod ActionScript3):

var pat:RegExp = /(#\w{6})([^#]+)/g; 
var html:String = t.replace(pat, "<font color=\'$1\'>$2</font>"); 
trace(html); // output :<font color='#ff00ff'>firstword</font><font color='#445533'>secondword</font><font color='#008877'>thirdword</font> 

Jeśli istnieje jedna # w tego łańcucha, wyjście nie będzie tak jak chcę go mieć. Nie wiem, jak napisać silniejsze wyrażenie regularne, aby to osiągnąć.

+0

Tak na marginesie, 'tag font' jest przestarzała i nie jest gwarantowane do pracy w przyszłości. Najlepiej używać CSS zamiast np. ' ...' –

Odpowiedz

5

Spróbuj użyć or (|) operatora i uprzedzona do końca wiersza:

var pat:RegExp = /(#[0-9a-f]{6})([^#]+?)(?=#|$)/gi; 
var html:String = t.replace(pat, "<font color=\'$1\'>$2</font>"); 
trace(html); 

Chciałbym również osobiście używać zamiast \w[0-9a-f] tutaj na wszelki wypadek. Przecznica (?=#|$) zapewnia, że ​​jest to koniec linii lub inny skrót. Dodałem także flagę i również na wszelki wypadek.

Skoro masz także bezpańskie skrótów, można użyć tego:

var pat:RegExp = /(#[0-9a-f]{6})(.+?)(?=#[0-9a-f]{6}|$)/gi; 
var html:String = t.replace(pat, "<font color=\'$1\'>$2</font>"); 
trace(html); 

Zobacz wyjście here.

A debuggex:

Regular expression image

+1

jeśli ciągiem źródłowym jest '# ff00fffirstword # 445533secondword ## 008877thi # rdword #' wyjście powinno być firstword< font color = '# 445533'> secondword # thi # rdword #

+0

@RexSmith Dodano nowe wyrażenie, aby się tym zająć! Nie wiedziałem, że masz również bezpańskie hashe, więc to powinno działać teraz :) – Jerry

+0

haha, to działa! Dzięki wszystkim! –

6

Opis

mógł użyć tego wyrażenia regularnego

Regex: ([#][0-9a-f]{6})(.*?)(?=[#]|$) Wymień <font color='\1'>\2</font>

enter image description here

kodu JavaScript Przykład:

<script type="text/javascript"> 
    var re = /([#][0-9a-f]{6})(.*?)(?=[#]|$)/; 
    var sourcestring = "#ff00fffirstword#445533secondword#008877thirdword"; 
    var replacementpattern = "<font color='\1'>\2</font>"; 
    var result = sourcestring.replace(re, replacementpattern); 
    alert("result = " + result); 
</script> 

$sourcestring after replacement: 
<font color='#ff00ff'>firstword</font><font color='#445533'>secondword</font><font color='#008877'>thirdword</font> 
+0

W jaki sposób wygenerowałeś diagram przepływu regex? – DhruvPathak

+0

Nie należy "sourcestring" być '# ff00fffirstword # 445533secondword # 008877thirdword'? –

+0

@ Jordan Trudgett & Rex Smith: Tak, już poprawione, odśwież przeglądarkę. –

Powiązane problemy