2015-12-30 10 views
7

私の文字列は次のとおりです。javascriptでこの正規表現を解析するときに何が間違っていますか?

<div> (blah blah blah) ---> quite big HTML before coming to this line.<b>Train No. &amp; Name : </b></td><td style="border-bottom:1px solid #ccc;font:12px arial"><span>12672/SOUTH TRUNK EXP</span></td> 

私は正規表現

var trainDetails = new RegExp("<b>Train No. &amp; Name : </b></td><td.*>([0-9][a-z][A-Z]+)</span></td>", "m"); 

しかしtrainDetailsがnullまたは空ですを策定するために管理しました。

私がしようとしているのは、列車名と列車番号をspan要素内に入れることだけです。

私が間違っているポインタはありますか?

+1

。 **主な**問題は、正規表現でHTMLを解析しようとしていることです。これはあまり推奨されていません。 – npinti

+0

@npinti:私が初心者であることを指摘してくれてありがとう。私はJavascriptでHTMLを解析する良い方法を提案できますか? –

+0

@npinti正規表現で_general_ HTMLを解析することに同意するのは悪い考えですが、これは正規表現で簡単に解析できる既知のHTMLの非常に特定なセットです。 –

答えて

4

それは私の仕事:

を正規表現

DOM

string = ('<b>Train No. &amp; Name : </b></td><td style="border-bottom:1px solid #ccc;font:12px arial"><span>12672/SOUTH TRUNK EXP</span></td>'); 
string = string.replace(new RegExp('(<\/?)td', 'g'), '$1xmltd'); 
tempDoc = document.createElement('xml'); 
tempDoc.innerHTML = string; 
node = tempDoc.getElementsByTagName('xmltd'); 
trainDetails = node[node.length-1].textContent; 

を使用して

string = '<div> (blah blah blah) ---> quite big HTML before coming to this line.<b>Train No. &amp; Name : </b></td><td style="border-bottom:1px solid #ccc;font:12px arial"><span>12672/SOUTH TRUNK EXP</span></td>'; 

var trainDetail = string.replace(new RegExp(".*?([^\>]+)(?:\<\/[A-z]+\>)+$","g"), '$1'); 

を使用するには、文字列の最後の "<TD>は" 列車のディテールを持っていることを条件とします。

+0

@now名前を挙げられない人。それは働いたのですか? – Vegeta

+0

私は実行しようとしています。間違いなくそれが働いた場合は投稿します。素晴らしい答えをありがとう –

+0

私の使用例では、このhtmlの前に多くの文字があります。その場合、どのように進行するのですか? (Pls。編集を参照してください) –

1

.+\<span>(.+)\<\/span>.+ グループ#1をキャッチしてください。

+0

私たちは行く、まだ第1グループをキャッチ:/。+トレイン番号+ \ (。+)\ <\/span\>/ –

+0

結果を参照してください:https://www.debuggex.com/r/aoK0s3hspZ1DMsnr –

+0

ありがとうたくさん: )私はゆっくりとそれを理解し始めています。 –

4

正規表現は、このユースケースの理想的な解決策ではありません。あなたのブラウザに組み込まれているHTMLパーサを使って<span>の内部HTMLを取得することをお勧めします。

var el = document.createElement('html'); 
el.innerHTML = '<div> (blah blah blah) ---> quite big HTML before coming to this line.<b>Train No. &amp; Name : </b></td><td style="border-bottom:1px solid #ccc;font:12px arial"><span>12672/SOUTH TRUNK EXP</span></td>'; 
var output = el.getElementsByTagName('span')[0].innerHTML; 

出力変数の値は次のようになります。

12672/SOUTH TRUNK EXP 

編集

あなたが特定の<span>に興味があるなら、私はそのタグにクラスを追加したり、示唆その親の<td>タグ、例えば:

<span class="train-number-and-name"> 
    12672/SOUTH TRUNK EXP 
</span> 

そして、このようにそれをフェッチ:1:正規表現の構文では、 `/`予約ので、エスケープする必要がある: `\ /`あなたはあなたのアプローチで2つの問題を抱えている

var output = el.querySelector('span.train-number-and-name').innerHTML; 
関連する問題