2013-10-29 13 views
2

我有以下字符串:的Javascript:格式字符串和避免多次更換

var str=' 
       <span class="productName">Basa fillets</span><br> 
       Brand: 
       <span class="brandName">COMPLIMENTS</span><br> 
       400 <abbr title="Gram" lang="en">gr</abbr> 
      ' 

我需要「400」(可以是一個詞,甚至一個句子)。 我至今是:

d = str.replace(/<br>/g,'').replace(/<.*<\/.*>/g,'').replace(/\n/g,'').replace(/ */g,'').replace(/brand:/i,''); 

它的工作原理,但......嗯,我敢肯定,我可以做的更好。我有很多類似的排隊替換我的代碼,我想知道如何改善,所以我更尋找一個比一個特定的解決方案一般的答案。

謝謝!

+1

您的字符串無效,您需要用'\「'或''''在主字符串中使用''''符號。將其更改爲'var str =「巴薩魚片
品牌: COMPLIMENTS
400 gr」 ;' – abc123

+1

或者用「'改變它周圍的」「。編輯,顯然是一個錯字... – xShirase

回答

5

而不是使用字符串工具/正則表達式,你可以使用DOM方法(它 HTML)。

首先製作一個「假」div並將HTML添加到它。

var str="\ 
       <span class=\"productName\">Basa fillets</span><br>\ 
       Brand: \ 
       <span class=\"brandName\">COMPLIMENTS</span><br>\ 
       400 <abbr title=\"Gram\" lang=\"en\">gr</abbr>\ 
      "; 

var fakeDiv = document.createElement('div'); 
fakeDiv.innerHTML = str; 

然後,只需使用常規的DOM遍歷方法來獲得您需要的節點。取決於您的HTML,有很多方法可以使用該元素。

var brandName = fakeDiv.getElementsByClassName('brandName'); 

var textNode = brandName[0].nextSibling.nextSibling; 

console.log(textNode.nodeValue.trim()); 

DEMO:http://jsfiddle.net/aqpgV/

或者,您可以從<abbr>元素開始和向後工作。

var gram = fakeDiv.getElementsByTagName('abbr'); 

var textNode = gram[0].previousSibling; 

console.log(textNode.nodeValue.trim()); 

DEMO:http://jsfiddle.net/aqpgV/1/

但是你穿越這是給你:-)

+0

偉大的答案,我不會想到假的DIV!非常感謝! – xShirase

+0

很高興能幫到你! :-D是的,你實際上並不需要實際在DOM中的元素來使用它們;-) –

+0

我的生活變得更加簡單:-D我會盡快接受! – xShirase

0

正則表達式

class="brandName">[^<]+</span><br>[^\w]+([^<]+) <abbr title= 

Regular expression visualization

Debuggex Demo

備註:組1將包含您想要的項目。

+1

性感!但是我的隊友會用那個拉頭髮:-D謝謝! – xShirase

+0

@xhirase完全可以理解,我真的認爲使用html的本地概念和操作獲取項目更適合於此。只是想給你一個RegEx的快速例子。 – abc123

0

如果你想使用正則表達式,你可以做這樣的事情。

var str="\ 
      <span class=\"productName\">Basa fillets</span><br>\ 
      Brand: \ 
      <span class=\"brandName\">COMPLIMENTS</span><br>\ 
      400 <abbr title=\"Gram\" lang=\"en\">gr</abbr>\ 
     "; 

    var myRegexp = /COMPLIMENTS<\/span><br>\W(.*?) <abbr /g; 
    var match = myRegexp.exec(str); 
    alert(match[1]); 
+0

不適用,補充可能是任何東西。無論如何thx! – xShirase