0

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

例如:

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

会工作,但是;

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

在 AS3 中不起作用。

我需要的是匹配一个复杂的前缀,但在最终匹配中排除它。在上面的例子中;我试图在 HTML 文本中获取正文内容,但不是开始和结束正文标签。实际的测试文本如下所示:

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

3 回答 3

0

这是来自我的 JavaScript RegExp 经验,但应该是比较相似的......

我认为您不需要后视,您只需要非捕获组。它们仍然匹配输入,但它们没有被匹配捕获:

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

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

于 2009-05-23T00:23:48.403 回答
0

我认为您希望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

于 2009-05-23T00:38:33.913 回答
0

感谢现状;问题很快就解决了。。

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

这仅返回没有正文标签的内容。无需担心lookbehinds 和/或lookaheads..

谢谢大家。。

于 2009-05-23T01:12:44.280 回答