ActionScript 3 中的正则表达式:如何排除复杂前缀?

Posted

技术标签:

【中文标题】ActionScript 3 中的正则表达式:如何排除复杂前缀?【英文标题】:RegExp in ActionScript 3: How to exclude a complex prefix? 【发布时间】:2009-05-23 00:12:12 【问题描述】:

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

例如:

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

可以,但是;

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

在 AS3 中不起作用。

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

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

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

【讨论】:

我尝试过的正则表达式代码在我的帖子中,并且之前也尝试过你的。他们没有用。但是现在问题已经解决了。谢谢你的时间..【参考方案3】:

感谢quoo;问题很快就解决了..

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

这只会返回没有正文标签的内容。 无需担心后视和/或前瞻..

谢谢大家..

【讨论】:

耶,很高兴为您提供帮助,您也可以这样做: var re:RegExp = new RegExp(/]*>(.*?)/gis ); 返回 strHTML.replace(re, "$1");然后你没有保存身体的打开和关闭标签......但我想这并不重要。 当然。我设置了 3 个组,因为在函数中我让用户选择是否包含标签。如果包含标签;我返回“$1\r\n$2\r\n\$3”。

以上是关于ActionScript 3 中的正则表达式:如何排除复杂前缀?的主要内容,如果未能解决你的问题,请参考以下文章

ActionScript 3 AS3:正则表达式基本示例

ActionScript 3 AS3:正则表达助手

ActionScript 3 AS3使用正则表达式删除回车符和新行

ActionScript 3 AS3使用正则表达式检查并返回有效的英国邮政编码

正则表达式来检查,如果在字符串前两个字符是字母

Linux Shell正则表达式如何匹配1~3位数字