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>
いる部分は、私が実際に必要としている部分は「オリンパ」です。そこで、次の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などでコードを絞り込む簡単な方法はないため、完全なソースコードを検索することが私の唯一の選択肢です。
これが面白いことです。私は2つのオンライン正規表現マッチャー(そのうちの1つは特にJS-regex用)を使用して、完全なソースコードに対して正規表現をテストしました。どちらの場合も、一致して「オリンパ」を正確に返しました。ただし、Chromeに実際のページにスクリプトを含めると、次のエラーが発生します。
Error in event handler for 'undefined': Cannot read property '1' of null TypeError: Cannot read property '1' of null
明らかに、私の行の最初の部分は一致するものが見つからないため「null」を返し、「null」の[1]を取ることは機能しません。
ソースコードを照合していないのではないかと思いましたが、スクリプトdocument.documentElement.innerHTML
をコンソールに出力すると、完全なソースコードが出力されます。
この正規表現が失敗する理由がわからないので、非常にばかげた何かを見落としているに違いありません。他の誰かが問題を見ていますか?
ケネス、すべての助けに感謝します