2009-11-27 82 views
0

我想匹配下面HTML代碼段的值:(紅寶石)幫助匹配我的正則表達式

<input name="example" type="hidden" value="matchTextHere" /> 

下列要求:

x = response.match(/<input name="example" type="hidden" value="^.+$" \/>/)[0] 

這是爲什麼不工作?它不匹配 'matchTextHere'

編輯:

當我使用:

x = response.match(/<input name="example" type="hidden" value="(.+)" \/>/)[0] 

它整個HTML元素相匹配,而不是隻值 'matchTextHere'

回答

3

^匹配行的開頭,$匹配行的末尾。將^.+$更改爲\w+,它將適用於不包含任何符號的值。使它成爲一個包含數值的小括號 - (\w+)

更新:匹配引號之間的任何內容(假設值中沒有任何引號),請使用[^"]+。如果價值中有引號,這是一個不同的球賽。 .+將在這種情況下工作,但由於回溯會更慢。 .+首先匹配到字符串的末尾(因爲.甚至匹配"),然後查找"並失敗。然後它返回一個位置並尋找"並再次失敗 - 依此類推,直至找到" - 如果在value之後還有一個屬性,則您將獲得matchTextHere" nextAttr="something作爲匹配。

x = response.match(/<input name="example" type="hidden" value="([^"]+)" \/>/)[1] 

這就是說,如果任何屬性值之間有額外的空間,則正則表達式將失敗。解析HTML與正則表達式是不是一個好主意 - 如果你必須使用正則表達式,你可以使用\s+

/<input\s+name="example"\s+type="hidden"\s+value="([^"]+)"\s*\/>/ 
+0

我需要匹配的字母,符號和數字。基本上我需要匹配引號之間的任何內容。 – sepiroth 2009-11-27 06:16:48

+0

使用'[^「] +'來捕獲符號 – Amarghosh 2009-11-27 06:20:30

+0

/ /返回整個字符串,而不是值i想要 – sepiroth 2009-11-27 06:22:42

0

允許多餘的空格因爲你開始的行令牌(^),並最終OF-線標記($)在您的正則表達式中。我認爲你的意圖是捕捉價值,這可能會解決你的問題:value="(.+?)"

請注意,使用正則表達式處理html不是一個好主意,它甚至可以使用drive you crazy。改用html parser代替。

0

你不需要的^和$:

x = response.match(/<input name="example" type="hidden" value=".+" \/>/)[0] 
0

你只需要[0]改爲[1]

response='<input name="example" type="hidden" value="matchTextHere" />' 

puts response.match(/<input name="example" type="hidden" value="(.*?)" \/>/)[1] 

matchTextHere