如何只替换HTML标签对的第一次出现?

时间:2016-04-08 12:13:20

标签: jquery regex

我的字符串:

<h2>headline</h2>

我想用另一个字符串替换第一个标题str.replace(/<h2>(.*)<\/h2>/, 'another String')

到目前为止,我有<h2>headline</h2><p>content</p><h2>another headline</h2>但由于第二个</h2>而取代<h2>(.*)<\/h2>。 有没有办法只替换第一个str.replace(/<h2>(.*[except <\/h2>])<\/h2>/, 'another String')

类似于:var Firebase = require('firebase'); var ref = new Firebase("<FIREBASE-APP>"); var connectedRef = ref.child(".info/connected"); connectedRef.on("value", function(snap) { if (snap.val() === true) { console.log("connected"); } else { console.log("not connected"); } });

4 个答案:

答案 0 :(得分:1)

您可以使用:first伪选择器更改第一个h2的内容,如下所示。

$('h2:first').text('another string')

如果您想要替换h2本身,请使用replaceWith()方法,如下所示。

 $('h2:first').replaceWith('another string')

答案 1 :(得分:0)

使用以下正则表达式:

str.replace(/<h2>(.*?)<\/h2>/, 'another String')
量词:*?在零和无限次之间,尽可能少,

答案 2 :(得分:0)

jquery解决方案将如下:

e = $j("<div>" + string );
e.find("h2").first().html("any html you want");
e.html()

JS解决方案就像

d = document.createElement ("div");
d.innerHTML = string;
d.querySelector("h2").innerHTML = "any html you want";
d.innerHTML 

或简单的字符串操作

var x = string ;
x.substr(0,x.indexOf("<h2>")+4) + "you string " +  x.substr(x.indexOf("</h2>")+5)

答案 3 :(得分:0)

这样的事情怎么样?没有jQuery,只是本机JavaScript。

var s = '<h2>headline</h2><p>content</p><h2>another headline</h2><p>another content</p>'

// Create a holder element and let the document parse our HTML
var el = document.createElement('div')
el.innerHTML = s

// Find and replace what we want
el.querySelectorAll('h2')[0].innerHTML = 'REPLACED'

// Just to output in our snippet
document.querySelectorAll('#init')[0].innerHTML = s
document.querySelectorAll('#res')[0].innerHTML = el.innerHTML
div{border: 1px solid red}
<h3>New HTML</h3>
<div id="res"></div>
<hr>
<h3>Original HTML</h3>
<div id="init"></div>

除了

对HTML等复杂结构使用正则表达式通常是个坏主意。你真的想要解析它们。这个答案背后的想法是利用浏览器(它知道如何解析HTML)来找到你想要的元素并使用它。