regexp,使用反向引用将两个表达式连接在一起(但这有效吗?)

时间:2013-05-29 19:09:07

标签: regex actionscript-3

对字符串运行两次正则表达式搜索是否更有效:

public static var _isAttrib1:RegExp = /\w+ {0,}= {0,}\'[^']{0,}'/g;
public static var _isAttrib2:RegExp = /\w+ {0,}= {0,}\"[^']{0,}"/g;

或者组合这些并使用反向引用运行单个RegExp?他们提到here但反向引用效率不高。

如果您认为合并会有好处,您介意给我看看怎么样?我只是无法将两个RegExps结合起来!由于某种原因,这会破坏:

EDIT3:以下是错误!有关信息,请参阅下面的EDIT3。

var _isAttrib1:RegExp = /\w+ {0,}= {0,}(\'|\")[^']{0,}\1/g;

var arr:Array = _isAttrib1.exec("2222 s='jjj 111'2uuuus='dd'   s=''  ")

trace(arr) // s='jjj 111','
            //but it should only give s='jjj 111' (array should have length 1 not 2).

谢谢!由此带动了一点便盆。

编辑:对不起,有点背景帮助:

这是在动作脚本AS3(不幸的是)。

我正在尝试从转换为String的XML中干净地提取attrib,并应用了一些格式(额外的空格)。例如。给出一个c ='2',d ='4',e ='5'的数组。

Edit2:请注意,有时会使用“使用而不是包围”。

编辑3:以下工作正常。我确切地想知道RegExp.exec返回的是什么。请参阅here,特别是g(全局)部分,它是返回内容的第一个元素是匹配的内容。

  

var r:RegExp = / \ w + * = (['“])((?!\ 1)。| \\ 1) \ 1 / g;

     

var str:String =“sdsdsd w ='2322'r = \”fdfd dfdfd dfd \“r =''”;

     

var result:Object = r.exec(str);

     

while(result!= null){trace(result [0])result = r.exec(str);   }   // w ='2322'   // r =“fdfd dfdfd dfd”   // r =''

2 个答案:

答案 0 :(得分:1)

您可以使用对已捕获组的反向引用

/\w+ *= *(["']).*?\1/g;

第1组将捕获"'

\1现在会引用第1组中捕获的值,即"'

*{0,}

类似

更多信息here

答案 1 :(得分:0)

我建议你使用这个很棒的工具。它有一个图书馆,描述,实时突出显示和更多。它是用闪光灯制作的,所以你知道配方符合你想要的。

http://gskinner.com/RegExr/