RegExp в ActionScript 3: как исключить сложный префикс? - PullRequest
0 голосов
/ 23 мая 2009

Движок AS3 RegExp (и JavaScript на основе ECMAScript) не поддерживают сложные выражения "смотреть за спиной" (прогнозные выражения полностью поддерживаются.)

Например:

 (?<=<body>)(.*?)(?=<\/body>)

будет работать, но;

(?<=<body\b[^>]*>)(.*?)(?=<\/body>)

не будет работать в AS3.

Мне нужно сопоставить сложный префикс, но исключить его в финальном совпадении. В приведенном выше примере; Я пытаюсь получить содержимое тела в тексте HTML, но НЕ открывающий и закрывающий теги тела. И сам текст теста выглядит так:

<body bgcolor="#EEEEEE">
Some content here...
</body>

Ответы [ 3 ]

0 голосов
/ 23 мая 2009

Я думаю, что вы хотите var regExp:RegExp = /<body>(.*?)<\/body>/i; в отличие от 3 групп в вашем текущем регулярном выражении, так что вы только захватываете тег body, затем вы можете ссылаться на совпадение либо \ 1, либо $ 1, в зависимости от того, какую функцию вы используете. с помощью:

http://livedocs.adobe.com/flex/3/html/help.html?content=12_Using_Regular_Expressions_09.html

0 голосов
/ 23 мая 2009

Благодаря Куо; проблема решается в кратчайшие сроки ..

var re:RegExp = new RegExp(/(<body\b[^>]*>)(.*?)(<\/body>)/gis); }
return strHTML.replace(re, "$2");

Возвращает только содержимое без тегов body. Не нужно беспокоиться о взглядах и / или взглядах.

Спасибо вам всем ..

0 голосов
/ 23 мая 2009

Это происходит из моего опыта JavaScript в RegExp, но он должен быть относительно похожим ...

Я не думаю, что вам нужно оглядываться назад, вам просто нужны не захватившие группы. Они все еще соответствуют вводу, но они не фиксируются совпадением:

(?:<body\b[^>]*>)(.*?)(?:<\/body>)

Когда вы делаете совпадение, возвращаемые совпадения будут включать только содержимое (но не открывающие / закрывающие теги тела).

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