我可以将字符串#ff00fffirstword#445533secondword#008877thirdword转换为

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

在javascript或actionscript3程序中使用正则表达式?

我尝试了下面的代码,但这并不完美(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>

如果该字符串中还有一个#,则输出将不像我希望的那样。我不知道如何编写更强大的正则表达式来实现这一目标。

最佳答案

尝试使用or(|)运算符,并在行尾进行超前查找:

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

为了以防万一,我个人也会在这里使用[0-9a-f]而不是\w。超前的(?=#|$)可确保它是行尾或其他哈希。我还插入了i标志,以防万一。

由于您也有散列哈希,因此可以使用以下一种:
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);

参见输出here

和debuggex:

10-08 00:02