我有一個非常具體的問題,關於在Javascript中的正則表達式匹配。我在這裏想匹配一段代碼,更具體的部分:Javascript正則表達式匹配在實際頁面上失敗,但正則表達式測試工作正常
<TD WIDTH=100% ALIGN=right><a href="http://forum.tibia.com/forum/?action=main&sectionid=2">World Boards</a> | <a href="http://forum.tibia.com/forum/?action=board&boardid=106121">Olympa - Trade</a> | <b>Bump when Yasir...</b></TD>
我想匹配的部分是boardid=106121">Olympa - Trade</a>
,我真正需要的部分是「Olympa」。所以我用的JS代碼如下專線,以獲得匹配,並有「Olympa」返回:
var world = document.documentElement.innerHTML.match('/boardid=[0-9]+">([A-Z][a-z]+)(- Trade){0,1}<\/a>/i')[1];
的(- Trade)
部分是我的問題,因此在正則表達式的{0,1}
可選。
也沒有簡單的方法來縮小代碼的範圍。 getElementsByTagName,所以搜索完整的源代碼是我唯一的選擇。
現在,這裏有趣的事情。我已經使用了兩個在線正則表達式匹配器(其中一個專用於JS-regex)來測試我的正則表達式與完整的源代碼。這兩次都有一場比賽,並且完全回到了「Olympa」。然而,當我有Chrome瀏覽器包括實際的頁面上的腳本,它提供了以下錯誤:
Error in event handler for 'undefined': Cannot read property '1' of null TypeError: Cannot read property '1' of null
很顯然,我行的第一部分返回「空」,因爲它沒有找到一個匹配,並採取[ 1]的「null」不起作用。
我想我可能沒有在源代碼上做匹配,但是當我讓腳本輸出document.documentElement.innerHTML
到控制檯時,它會輸出完整的源代碼。
我沒有看到這個正則表達式失敗的原因,所以我必須忽略一些非常愚蠢的東西。其他人是否看到這個問題?
所有幫助表示讚賞, 肯尼斯
哦,當然。我現在感覺很傻! 沒有使用「exec」,它工作正常。我不太明白你想要創造的差異。 我會盡快將您的答案標記爲正確答案(還有2分鐘的等待時間)。 – Kenneth