0
var text_source="<a href='c:/exam_file.xls' target='_blank'>file downdload</a>";
text_search="file";
text_source.replace(new RegExp(text_search, 'gi'), 
                   "<span style='font-weight:bold'>" +
                   text.toLowerCase() + "</span>");

「a tag」リンク アドレスも変更されました。

<a href="C:/exam_<span style='font-weight:bold'>"file</span>"><span style='font-weight:bold'>file</span> download</a>

しかし、それはこのように見えるはずです。「a タグ」のテキスト値を変更する必要があります。

<a href="C:/exam_file.xls" target="_blank"><span style='font-weight:bold'>file</span> download</a>
4

3 に答える 3

2

RegExp が要素のコンテンツに対してのみ実行されるようにするには、操作するすべての要素を選択してそれらのコンテンツを確認する必要があります。

例として:

var regExp = /dosya/ig;
[].slice.call(document.getElementsByTagName('a'), 0).forEach(function(element) {
  if(regExp.test(element.textContent)) {
    element.innerHTML = element.textContent.replace(regExp, function(text) {
      return '<span style="font-weight: bold">' + text.toLowerCase() + '</span>';
    })
  }
});

同様のことを行う jQuery 疑似セレクター:containsもあります。

于 2012-07-09T07:20:34.207 に答える
2

私が言ったことはすぐに説明しますが、純粋な正規表現だけでループなしでこれを行うことができます。以下は私がこれをどのように達成したかです:

var text_source = "<a href='c:/bilmem_ne_dosyasi.xls' target='_blank'>Dosya Downdload</a>";
text_search = "dosya";
var patt = new RegExp("(<a .*?>)(" + text_search + ")(.*?</a>)","gi");
var text_source = text_source.replace(patt, function(match, $1, $2, $3) {
    return $1 + "<span style='font-weight:bold'>" + $2.toLowerCase() + "</span>" + $3;
});
document.write(text_source);

デモ </p>

先ほど言ったことに戻りますが、html は非常に複雑な言語になる可能性があり、正規表現を使用して解析することはできますが、大量のデータには使用しないでください。一部のパターンは複雑すぎて照合できません。

于 2012-07-09T08:03:35.123 に答える
0

HTMLまたはXMLで正規表現を使用しないという回答は全体として正しいですが、ネストされたタグが多すぎない単純なケースでは、次を使用できます。

var text_source="<a href='c:/bilmem_ne_dosyasi.xls' target='_blank'>Dosya Downdload</a>";
text_search="(<[^>]*>[^<]*)(dosya)([^<]*<[^>]*>)";
var replaced = text_source.replace(new RegExp(text_search, 'gi'), "$1<span style='font-weight:bold'>$2</span>$3");
于 2012-07-09T07:58:42.237 に答える