0

对字符串运行两个正则表达式搜索会更有效吗:

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

或者结合这些并使用反向引用运行单个正则表达式?他们在这里提到,反向引用虽然效率不高。

如果你认为会有一个好处结合,你介意告诉我怎么做吗?我就是不能让两个正则表达式结合起来!由于某种原因,这搞砸了:

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).

谢谢!受此驱使有点便盆。

编辑:对不起,一些背景有助于:

这是在 actionscript AS3 中(不幸的是)。

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

Edit2:请注意,有时使用封装“而不是封装”。

Edit3:以下工作正常。我完全混淆了 RegExp.exec 返回的内容。请参阅此处,特别是 g(全局)部分,它是返回的第一个元素是匹配的内容。

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

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

var 结果:对象 = r.exec(str);

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

4

2 回答 2

1

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

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

第 1 组将捕获"'

\1现在将引用组 1 中的捕获值,即要么"'

*类似于{0,}


更多信息在这里

于 2013-05-29T19:14:45.537 回答
0

I suggest this awesome tool for you. It has a library with a description, realtime highlighting and lots lots more. Its made in flash so you know the formula is going to be compatible with what you want.

http://gskinner.com/RegExr/

于 2013-05-30T08:06:17.057 回答