在使用正则表达式时,我真的不好,所以请耐心等待。
我有一段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
答案 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<");
原始答案
看到这个答案:
至少,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”)修饰符;我已经演示了如何应用它们。