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 回答