Проблема с регулярными выражениями Actionscript - PullRequest
2 голосов
/ 15 февраля 2010

Я должен проанализировать информацию о цвете из данных HTML.Цвета могут быть либо цветами RGB, либо именами файлов в образце.

Я использовал http://www.gskinner.com/RegExr/ для разработки и тестирования шаблонов.Я скопировал дословно код регулярного выражения AS из инструмента в Flex Builder.Но когда я выполняю шаблон для строки, я получаю нулевое значение.

Вот шаблоны и пример строки (я взял правильные 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);  

Оба массива равны нулю.

Это мой первый опыт AS-кодирования, поэтому я думаю, что что-то не так.

Стив

Ответы [ 2 ]

3 голосов
/ 15 февраля 2010

(Я не знаю 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_].

0 голосов
/ 15 февраля 2010

Я не знаю достаточно, чтобы сказать, правильны ли ваши шаблоны регулярных выражений, но из документов класса AS3 RegExp похоже, что ваш new RegExp() вызов требует второго аргумента для объявления флагов чувствительность к регистру и т. д.

РЕДАКТИРОВАТЬ: Кроме того, как указал Барт 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})/;

... в этом случае строка флага (если есть) включается после финала /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...