0

:var code; として HTML 文字列を取得しました。PHP のpreg_match_all(). 示されている例と同様のことを PHP で行いましたが、JavaScript でそれを行うにはどうすればよいでしょうか? PHP の例のように、すべての href と title の値を配列に含めることができますか?

注: の初期値は$input、以下の例のように div のブロックです。

<div class="up"  rel="1234" id="up1234" style="float:right">
<div class="pic" style='border:3px solid #cacaca' >
 <a href="/episode 14" title="episode 14">
    <img src="images/image14.jpg" alt="watch episode 14"  />
 </a> 
</div>
<a href="/episode 14" title="episode 14 "class="title">watch episode 14</a> 
<div class="data" style="height:auto">watch episode 14 </div>
<center>
 <a href="episode14" title="episode 14" class="data" id="play_me1234">
 <img src="/images/image14.jpg" alt="watch episode 14"/>
 </a>
</center>
    </div>

preg_match_all('#href\s*=\s*"(.*)"#siU', $input, $foo1);
preg_match_all("#class=\"title\">([^<]+)</a>#", $input, $foo2);

$i = -1;
$foo1[1] = array_unique($foo1[1]);
 foreach($foo1[1] as $k => $v ){
  //echo $v;


 $i++;
echo '<a href="./doit.php?Id='.$v.'&title='.$foo2[1][$i].'"> '.$foo2[1][$i].' </a> <br />' ;
 }  
4

2 に答える 2

1
<script type="text/javascript">
    var pattern = /<a href="([^"]+?)" title="[^"]+?" class="title">([^<]+?)<\/a>/gi;
    code = code.match(pattern);
    for (i = 0; i < code.length; i++) {
        document.write(code[i].replace(pattern, '<a href="./doit.php?Id=$1&title=$2">$2</a><br />'));
    }
</script>
于 2012-12-07T04:36:46.517 に答える
0

を使用しますcode.match(/your regex here/g)g修飾子は、最初の一致だけではなく完全な一致の配列を返すように動作を変更しますがmatch、サブパターンは失われます。一致を正規表現と再度照合することでサブパターンを取り戻すことができますが、今回は修飾子を使用しません。

とはいえ、代わりに DOM をパースすることもできます。要素に HTML がある場合は、 を使用querySelectorAll("[href]")して属性を持つ要素を検索し、hrefそれらをループできます。同様に、querySelectorAll(".title")「タイトル」要素をより確実に見つけるために使用します。

于 2012-12-07T03:18:25.587 に答える