ActionScript HTML Regexp Selector



真的不擅长使用regexp,所以请原谅我。

我有一块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。我很确定我的regexp字符串是好的,但我在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

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

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

…或者您可以将其写成字符串字面值,并将其传递给RegExp构造函数:

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

你似乎在使用这两种方法的混合物,结果得到了垃圾。其他一些兴趣点:

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

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

  • 你的正则表达式需要g ("global")和i ("ignore-case")修饰符;我已经演示了如何应用它们

例子使用

改编自此
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返回null

至少,gSkinner的工具应该能解决你的问题。

具体来说,要做您想做的事情,您将使用以下正则表达式:

/></g

在您的匹配,使用索引值,并替换为:

>n<

您可以在gskinner Regexr工具上使用Replace选项卡进行测试。

最新更新