Javascript正则表达式替换,多行

时间:2011-10-13 17:26:34

标签: javascript jquery regex

我有一些文本内容(使用jQuery从HTML中读取),看起来像这些示例中的任何一个:

<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,如果有一种方法可以在字符串中定位span标记(也就是说,它不是我们此时正在处理的DOM)。

4 个答案:

答案 0 :(得分:2)

您可以先从字符串中删除所有换行符,然后运行正则表达式:

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

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

答案 2 :(得分:1)

尝试使用

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

而不是

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

编辑:因为你使用字符串来定义正则表达式,所以不要忘记使用反斜杠,所以

[\s\S] 

将是

[\\s\\S]

答案 3 :(得分: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的含义是什么?