6

我可以将字符串转换#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>

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

4

2 回答 2

6

描述

你可以使用这个正则表达式

正则表达式: ([#][0-9a-f]{6})(.*?)(?=[#]|$) 替换为<font color='\1'>\2</font>

在此处输入图像描述

Javascript代码示例:

<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>
于 2013-06-02T14:43:24.667 回答
5

尝试使用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); 

请参阅此处的输出。

和调试器:

正则表达式图片

于 2013-06-02T14:43:00.960 回答