ActionScript 3中的RegExp:如何排除复杂前缀?

时间:2009-05-23 00:12:13

标签: regex actionscript-3 prefix lookbehind

AS3 RegExp引擎(以及基于ECMAScript的JavaScript)不支持复杂“lookbehind”表达式。 (完全支持前瞻表达。)

例如:

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

会工作但是;

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

在AS3中不起作用。

我需要的是匹配复杂前缀但在最终匹配中将其排除。 在上面的例子中;我试图在HTML文本中获取正文内容,但不是打开和关闭正文标记。实际测试文本如下所示:

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

3 个答案:

答案 0 :(得分:0)

这来自我的JavaScript RegExp经验,但它应该相对类似......

我认为你不需要后视,你只需要非捕获组。它们仍匹配输入,但匹配不会捕获它们:

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

当您进行匹配时,返回的匹配将仅包含内容(但不包括正文开始/结束标记)。

答案 1 :(得分:0)

我认为您需要var regExp:RegExp = /<body>(.*?)<\/body>/i;而不是当前正则表达式中的3个组,所以您只捕获正文标记,然后您可以使用\ 1或$ 1引用匹配,具体取决于您使用哪个函数'正在使用:

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

答案 2 :(得分:0)

感谢quoo;问题很快得到解决..

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

仅返回没有body标签的内容。 无需担心外观和/或前瞻......

谢谢大家..