2012-04-19 23 views
0

我一直試圖爲一個字符串創建一個RegEx近一天,但仍然沒有成功,任何人都可以幫忙嗎?正則表達式幫助請求提取帶引號的值

string example (double quotes are options, and can also be single quotes): 
    "234"? "<img src=\"http://abc.com/a.jpg\" onclick=\"alert(\"\"working with 'quotes'?\"\");\" />" 

and the following groups should be extracted: 
    234 
    <img src="http://abc.com/a.jpg" onclick="alert(""working with 'quotes'?"");" /> 

希望這是明確的,任何人都可以幫助請!

+0

賭注ween the separator「?」第一部分空間允許使用 – 2012-04-19 14:04:02

+0

,後面部分用「?」分隔;雙引號是可選的 – 2012-04-19 14:04:29

回答

1

我不確定這個正則表達式的效率,但這是一個匹配你的字符串的效率。

規則周圍數

  1. 行情是可選的,可以是單引號。
  2. 有關html的報價是可選的,可以是單引號。
  3. 問號後面的空格可以是0或多個。

輸入

"234"? "<img src=\"http://abc.com/a.jpg\" onclick=\"alert(\"\"working with 'quotes'?\"\");\" />" 

正則表達式

^['"]?(?<number>\d+)['"]?\?\s*['"]?(?<html>\<.*\>)['"]?$ 

輸出組

number: 234 
html: <img src=\"http://abc.com/a.jpg\" onclick=\"alert(\"\"working with 'quotes'?\"\");\" /> 
+0

我希望這是幫助。對不起,我沒有發現你的問題是對需求的描述。 – Joshua 2012-04-19 15:16:04

+0

恐怕你的正則表達式會失敗,如果你添加另一個標籤(<>)到字符串 - 它會匹配第一個<和最後一個>之間的所有內容。 – Kniganapolke 2012-04-20 07:29:53

+0

不知道你的意思 - 用戶說他只想要2組。所以是的,所以如果你添加額外的'<>'字符,它仍然會在'html'組中匹配。這個問題很模糊,但我認爲這是我們期望的。 :-) – Joshua 2012-04-20 11:52:06

0

這是一個快速解決方案(在JavaScript):

var s = "\"234\"? \"<img src=\"http://abc.com/a.jpg\" onclick=\"alert(\"\"working with 'quotes'?\"\");\" />\""; 
var matches = s.match(/['"][\d]*['"](?=[\s]*\?)|['"]<[^><]*>['"]/ig); 

第一部分['"][\d]*['"](?=[\s]*\?)比賽,引號裏的號碼,然後可選空間和?
第二部分['"]<[^><]*>['"]與引號內的任何符號(<,>除外)匹配> <>。

此解決方案的一個缺點是匹配的結果用引號括起來。
希望它能幫助你實現你所需要的。

+0

非常感謝你!我改變了一下,現在它工作了! – 2012-04-20 00:12:26