ActionScript HTML Regexp选择器

时间:2011-04-26 01:46:27

标签: regex actionscript-3 html-parsing exec selector

在使用正则表达式时,我真的不好,所以请耐心等待。

我有一段ActionScript代码,它应该评估HTML字符串并将其分解为单个部分。所以像<p>Hi</p><span>Hi</span><a href="index.php">Hi</a>这样的字符串会被翻译成:

1. <p>Hi</p>
2. <span>Hi</span>
3. <a href="index.php">Hi</a>
...

但是,当我运行此代码的测试版本时,我得到的值为 null 。我很确定我的正则表达式字符串是好的,但我在ActionScript中做错了。你能指出正确的方向吗?我的代码如下:

var evaluatedInput:RegExp = new RegExp('/<([A-Z][A-Z0-9]*)\b[^>]*>(.*?)</\1>/');
var output:Object = evaluatedInput.exec("<p>Hi</p><span>Hi</span><a href=\"index.php\">Hi</a>");
trace(output);

感谢您的时间,
spryno724

2 个答案:

答案 0 :(得分:1)

使用示例

从这里改编为 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/RegExp.html#exec()

     var myPattern:RegExp = /\>\</g;  
     var str:String = "<p>Hi</p><span>Hi</span><a href=\"index.php\">Hi</a>";
     var result:Object = myPattern.exec(str);

     //To loop through all results manually
     while (result != null) {             
         trace ( result.index, "\t", result);            
         result = myPattern.exec(str);
     }

     //or, just replace. Note this does not required the myPattern.exec(str);
     str.replace(myPattern, ">\n<");

原始答案

看到这个答案:

AS3 RegEx returns null

至少,gSkinner的工具应该是您问题的解决方案。

具体来说,要执行您想要执行的操作,您将使用以下正则表达式:

/\>\</g

在你的比赛中,使用索引值,并替换为:

>\n<

您可以使用“替换”选项卡在gskinner Regexr工具上自行测试。

答案 1 :(得分:1)

在ActionScript中,您应该以两种方式之一创建一个RegExp对象。您可以将表达式括在/.../分隔符中以形成正则表达式文字:

/<([A-Z][A-Z0-9]*)\b[^>]*>(.*?)<\/\1>/gi

...或者您可以将其写为 string 文字,并将其传递给RegExp构造函数:

new RegExp('<([A-Z][A-Z0-9]*)\\b[^>]*>(.*?)</\\1>', 'gi')

您似乎正在使用这两种方法的汞合金并因此获得垃圾。其他一些兴趣点:

  • 因为正则表达式文字使用正斜杠作为分隔符,所以正则表达式中的任何/都需要使用反斜杠进行转义,例如<\/\1>

  • 在字符串版本中,您必须转义反斜杠(例如</\\1>)。否则,AS编译器会尝试将其视为字符串文字转义序列的一部分,如\"\n。在您的代码中,\b表示退格,而不是单词边界,\1可能被视为语法错误,而不是您想要的反向引用。

  • 您的正则表达式需要g(“全局”)和i(“ignore-case”)修饰符;我已经演示了如何应用它们。