2011-10-13 449 views
2

我有一些文本內容(從使用jQuery的HTML閱讀),看起來像任一示例:的Javascript正則表達式替換,多

<span>39.98</span><br />USD 

或跨多行與增發價,如:

<del>47.14</del> 

    <span>39.98</span><br />USD 

的數字可能被格式化像

  • 1,234.99
  • 1239,99
  • 1 239,99

等(即不只是一個正常的十進制數)。我想要做的就是獲得<span></span>內的任何價值。

這就是我到目前爲止所提出的,但是我遇到了多行方法的問題,也有可能存在兩個數字的事實,我想忽略第一個數字。我嘗試過使用^和$以及「m」多行修飾符的變體,但沒有運氣。

var strRegex = new RegExp(".*<span>(.*?)</span>.*", "g"); 

var strPrice = strContent.replace(strRegex, '$1'); 

我可以在這裏使用jQuery,如果有目標字符串中的跨度標籤的方式(即它不是在這一點上,我們正在處理的DOM)。

回答

1

嘗試使用

"[\s\S]*<span>(.*?)</span>[\s\S]*" 

,而不是

".*<span>(.*?)</span>.*" 

編輯:既然你」重新使用字符串來定義你的正則表達式不要忘記去反斜槓,所以

[\s\S] 

[\\s\\S] 
+0

來自所有受訪者的良好答案,但是您的答案與我正在嘗試做的最接近,並且它工作得很好,謝謝! – duncan

+0

爲什麼第二個字符集[。\ s \ S]包含。 ?它似乎也適用於[\ s \ S] – duncan

+0

@duncan,這是一個錯字。現在修復。 – joelmdev

1

你可以先刪除從字符串中的所有換行符,然後運行你的正則表達式:

strContent = strContent.replace(/(\r\n|\n|\r)/gm,""); 
var strRegex = new RegExp(".*<span>(.*?)</span>.*", "g"); 
var strPrice = strContent.replace(strRegex, '$1'); 
2

這是與jQuery非常的方便。只需換你的HTML字符串一個div內使用jQuery像往常一樣:

var myHTML = "<span>Span 1 HTML</span><span>Span 2 HTML</span><br />USD"; 
var $myHTML = $("<div>" + myHTML + "</div>"); 

$myHTML.find("span").each(function() { 
    alert($(this).html()); 
}); 

這裏的a working fiddle

1

你想要這個嗎?

var str = "<span>39.98</span><br />USD\n<del>47.14</del>\n\n<span>40.00</span><br />USD"; 

var regex = /<span>([^<]*?)<\/span>/g; 

var matches = str.match(regex); 

for (var i = 0; i < matches.length; i++) 
{ 
    document.write(matches[i]); 
    document.write("<br>"); 
} 

測試在這裏:http://jsfiddle.net/9LQGK/

matches數組將包含匹配。但是,你不清楚你想要什麼。 there's potentially two numbers and I want to ignore the first one是什麼意思?

+0

我想中的電話號碼,但我不想要號碼 duncan

+0

@duncan然後它已經在執行此操作。 – xanatos