Tutorial :RegExp in ActionScript 3: How to exclude a complex prefix?



Question:

AS3 RegExp engine (and ECMAScript based JavaScript) do not support complex "lookbehind" expressions. (lookahead expressions are fully supported.)

For example:

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

will work but;

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

will not work in AS3.

What I need is to match a complex prefix but exclude it in the final match. In the example above; I'm trying to get the body contents in an HTML text but NOT the opening and closing body tags. And the actual test text looks like this:

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


Solution:1

I think you want var regExp:RegExp = /<body>(.*?)<\/body>/i; as opposed to the 3 groups in your current regexp, so you're only capturing the body tag, you can then reference the match with either \1 or $1 depending on which function you're using:

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


Solution:2

This is coming from my JavaScript RegExp experience, but it should be relatively similar...

I don't think you need look-behind, you just need non-capturing groups. They still match input, but they aren't captured by the match:

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

When you do the match, the returned matches will only include the contents (but not the body opening/closing tags).


Solution:3

Thanks to quoo; the problem is solved in no time..

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

This returns only the content without the body tags. No need to worry about lookbehinds and/or lookaheads..

Thanks to you all..


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »