[英]Javascript regexp replace, multiline
我有一些文本內容(使用jQuery從HTML中讀取),看起來像這些示例之一:
<span>39.98</span><br />USD
或者多行以及額外的價格,例如:
<del>47.14</del>
<span>39.98</span><br />USD
數字可以格式化為
等(即不僅僅是正常的十進制數)。 我想要做的就是獲得<span></span>
任何值。
這是我到目前為止所提出的,但我遇到了多線方法的問題,以及可能有兩個數字的事實,我想忽略第一個。 我嘗試過使用^和$以及“m”多線修改器的變體,但沒有運氣。
var strRegex = new RegExp(".*<span>(.*?)</span>.*", "g");
var strPrice = strContent.replace(strRegex, '$1');
如果有一種方法可以在字符串中定位span標記,那么我可以在這里使用jQuery(也就是說,這不是我們此時正在處理的DOM)。
您可以先從字符串中刪除所有換行符,然后運行正則表達式:
strContent = strContent.replace(/(\r\n|\n|\r)/gm,"");
var strRegex = new RegExp(".*<span>(.*?)</span>.*", "g");
var strPrice = strContent.replace(strRegex, '$1');
使用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());
});
這是一個工作小提琴 。
嘗試使用
"[\s\S]*<span>(.*?)</span>[\s\S]*"
代替
".*<span>(.*?)</span>.*"
編輯:既然你使用字符串來定義你的正則表達式,不要忘記esacpe你的反斜杠,所以
[\s\S]
將會
[\\s\\S]
你要這個?
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
?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.