我必须从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编码,所以我觉得我说错了。
史蒂夫
答案 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})/;
...在这种情况下,标志字符串(如果有的话)包含在最后的/
之后