2013-06-02 19 views
6

Tôi có thể chuyển đổi chuỗi #ff00fffirstword#445533secondword#008877thirdword đểtransform '# ff00fffirstword # 445533secondword # 008877thirdword' sang định dạng thẻ html

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

Sử dụng regexp trong javascript hoặc ActionScript3 chương trình?

Tôi đã thử đoạn code dưới đây, nhưng nó không hoàn hảo (mã 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> 

Nếu có thêm một # trong chuỗi đó, sản lượng sẽ không được như tôi muốn nó được. Tôi không biết làm thế nào để viết một regexp mạnh mẽ hơn để đạt được điều này.

+0

Là một sang một bên, 'thẻ font' bị phản đối và không được bảo đảm để làm việc trong tương lai. Cách tốt nhất là sử dụng CSS thay thế, ví dụ: ' ...' –

Trả lời

5

Hãy thử sử dụng một or (|) điều hành và một lookahead cho cuối dòng:

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

Tôi cũng sẽ sử dụng cá nhân [0-9a-f] thay vì \w đây chỉ trong trường hợp. Các lookahead (?=#|$) đảm bảo rằng đó là kết thúc của dòng hoặc băm khác. Tôi cũng đã chèn cờ i chỉ trong trường hợp.

Vì bạn cũng có băm đi lạc, bạn có thể sử dụng một:

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); 

Xem ra here.

Và debuggex:

Regular expression image

+1

nếu chuỗi nguồn là '# ff00fffirstword # 445533từ thứ hai ## 008877thi # rdword #' đầu ra phải là từ đầu tiên< font color = '# 445533'> secondword # thi # rdword #

+0

@RexSmith Đã thêm một regex mới để quan tâm đến điều đó! Tôi không biết bạn cũng có băm lạc, vì vậy mà nên được làm việc ngay bây giờ :) – Jerry

+0

haha, nó hoạt động! cảm ơn tất cả mọi người! –

6

Mô tả

Bạn có thể sử dụng regex này

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

enter image description here

Javascript Mã số Ví dụ:

<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

Bạn đã tạo sơ đồ dòng regex như thế nào? – DhruvPathak

+0

Không nên 'nguồn gốc' là' # ff00fffirstword # 445533mật khẩu # 008877thứ ba'? –

+0

@ Jordan Trudgett & Rex Smith: Đúng, đã được sửa, vui lòng làm mới trình duyệt của bạn. –

Các vấn đề liên quan