2017-06-16 16 views
0

このフォーラムでは、私の "要求"に近いanswareを見ましたが、十分ではありません (Regexp to capture string between delimiters)。デリミタ間の正規表現のキャプチャ文字列

質問:私はHTMLページを持っており、このページのすべての "img"タグのsrcだけを取得し、cheerioを使用せずに(ノードjを使用しています)1つの配列に配置します。

問題は、デリミタを除外したいということです。 どうすればこの問題を解決できますか?

+1

なぜあなたはcheerioを使いたくないですか? –

+0

ほとんどの環境では、デリミタを終了区切り文字のための[lookaround assertions](http://www.regular-expressions.info/lookaround.html) - lookahead '(?=)'と 'look? =) 'で始まります。ただし、JavaScriptでは見た目のヒントがサポートされていないため、[キャプチャグループ](http://www.regular-expressions.info/brackets.html)などの回避策が必要です。 –

+0

何を試しましたか? –

答えて

0

はいこれは正規表現では可能ですが、ネイティブのDOMメソッドを使用する方がはるかに簡単です(おそらく高速ですが、私にはそれを引用しないでください)。正規表現のアプローチから始めましょう。私たちは、簡単にimgタグのsrcを解析するためにキャプチャグループを使用することができます。

var html = `test<div>hello</div> 
 
<img src="first"> 
 
<img class="test" src="second" data-lang="en"> 
 
test 
 
<img src="third" >`; 
 
var srcs = []; 
 
html.replace(/<img[^<>]*src=['"](.*?)['"][^<>]*>/gm, (m, $1) => { srcs.push($1) }) 
 

 
console.log(srcs);

は、しかし、より良い方法を使用することですgetElementsByTagName
(いくつかの種類を取得します以下の点に注意してください。親ドメインのURLのSRCSが偽物/相対的なものが、あなたのアイデアを得るため)

var srcs = [].slice.call(document.getElementsByTagName('img')).map(img => img.src); 
 

 
console.log(srcs);
test<div>hello</div> 
 
<img src="first"> 
 
<img class="test" src="second" data-lang="en"> 
 
test 
 
<img src="third" >

+0

Tyに私に連絡することが大変です。私はそれがずっと遅いと思うので私はcheerioを使用していない。私はリクエストモジュールを持ったHTMLページを取得して、すべてのイメージのすべてのsrcを抽出したいだけです。 –

関連する問題