Actionscript正则表达式的问题

时间:2010-02-15 13:22:29

标签: regex actionscript-3

我必须从HTML数据中解析出颜色信息。颜色可以是RGB颜色,也可以是样本图像的文件名。

我使用http://www.gskinner.com/RegExr/来开发和测试模式。我将AS正则表达式代码从工具中逐字复制到Flex Builder中。但是,当我对字符串执行模式时,我得到一个null。

以下是模式和字符串的示例(我将正确的HTML标记输出,以便字符串正确显示):

DIV数据:

<div style="background-color:rgb(2,2,2);width:10px;height:10px;">

DIV模式:

/([0-9]{1,3},[0-9]{1,3},[0-9]{1,3})/

IMG数据:

<img src="/media/swatches/jerzeesbirch.gif" width="10" height="10" alt="Birch">

IMG模式:

/[a-z0-9_-]+/[a-z0-9_-]+/[a-z0-9_-]+\.[a-z0-9_-]+/

这是我的Actionscript代码:

var divPattern : RegExp = new RegExp("/([0-9]{1,3},[0-9]{1,3},[0-9]{1,3})/");
var imgPattern : RegExp = new RegExp("/[a-z0-9_-]+/[a-z0-9_-]+/[a-z0-9_-]+\.[a-z0-9_-]+/");

var divResult : Array = divPattern.exec(object.swatch);
var imgResult : Array = imgPattern.exec(object.swatch);  

两个数组都为null。

这是我第一次涉足AS编码,所以我觉得我说错了。

史蒂夫

2 个答案:

答案 0 :(得分:3)

(我不知道ActionScript,但我知道Javascript,他们应该足够接近以解决您的问题。)


为例如构造一个RegExp对象模式^[a-z]+$,您可以使用

var pattern : RegExp = new RegExp("^[a-z]+$");

或者更好,

var pattern : RegExp = /^[a-z]+$/

代码new RegExp("/^[a-z]+$/")错误,因为这需要在^之前和$之后的斜杠。


因此,您的DIV模式应该写为

var divPattern : RegExp = /([0-9]{1,3},[0-9]{1,3},[0-9]{1,3})/;

但是,如您所知,()是捕获的特殊字符,您需要将其转义:

var divPattern : RegExp = /\([0-9]{1,3},[0-9]{1,3},[0-9]{1,3}\)/;

对于IMG模式,由于/定界RegEx,您还需要将其转义:

var imgPattern : RegExp = /[a-z0-9_-]+\/[a-z0-9_-]+\/[a-z0-9_-]+\.[a-z0-9_-]+/

最后,您可以使用\d代替[0-9]\w代替[a-zA-Z0-9_]

答案 1 :(得分:0)

我不知道你的正则表达式模式是否正确,但是从AS3 RegExp class上的文档来看,看起来你的new RegExp()调用需要第二个参数来声明区分大小写的标志等

编辑:另外,正如Bart K指出的那样,使用new方法时不需要/分隔符。

所以你可以使用:

var divPattern:RegExp = new RegExp("([0-9]{1,3},[0-9]{1,3},[0-9]{1,3})", "");

或者您也可以使用/:

的替代语法
var divPattern:RegExp = /([0-9]{1,3},[0-9]{1,3},[0-9]{1,3})/;

...在这种情况下,标志字符串(如果有的话)包含在最后的/

之后