2013-05-29 37 views
0

難道是更有效地在一根繩子上運行兩個正則表達式搜索:正則表達式,將兩個表達式一起使用反向引用(不過是這有效嗎?)

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

或者將這些和使用背一個正則表達式運行參考?他們提到here,但後置引用效率不高。

如果你認爲會有一個好處結合,你會介意給我看怎麼樣?我無法將兩個RegExps結合起來!由於某種原因,這可以解決:

編輯3:注意下面是錯誤的!有關信息,請參閱下面的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(unforunately)。

我想幹淨地從XML轉換爲字符串,並應用一些格式(額外的空間)提取屬性。例如。給出一個c ='2',d ='4',e ='5'的數組。

EDIT2:請注意,有時候包裹「被用來代替包裹」的

EDIT3:下面的工作正常我正是RegExp.exec回報迷惑見here,特別是克(全球)。部分,它是在什麼是返回的第一個元素是什麼匹配

變種R:?!正則表達式=/\ w + * = (['「])((\ 1)| \ 1) \ 1/g;

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

var result:Object = r.exec(str); (result!= null){trace(result [0])result = r.exec(str); } //瓦特= '2322' // R = 「FDFD dfdfd DFD」 // R = ''

+2

嘗試'\ w + {0,} = {0,}(「|」)。*?{0,} \ 1' –

+1

如果你的字符串中都有一個轉義引號或撇號。例如:「我\」愛\「打破解析」 –

+1

嘗試'/ \ W + * = *(['「])((?!\ 1)。| \\\ 1)* \ 1 /'(另外,這是什麼語言?) – FrankieTheKneeMan

回答

1

可以使用回參考捕獲組

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

組1將捕獲"'

\1現在將在組1,即參考捕獲值要麼"'

*類似於{0,}


更多信息here

+1

你不能在字符類中使用反向引用。 – FrankieTheKneeMan

+0

@FrankieTheKneeMan **你可以使用它** ..你可以刪除downvote..try [here](http://regexpal.com/)如果你想清楚你的疑惑 – Anirudha

+0

不,你不能:http://regexr.com?351u1或者說,你可以,但它不會像你想象的那樣工作。 – FrankieTheKneeMan

0

,我建議你這真棒工具。它有一個描述的圖書館,實時突出顯示和很多很多。它在閃光燈下製作,所以你知道該公式將與你想要的兼容。

http://gskinner.com/RegExr/

相關問題