Javascript regexp替换,多行

我有一些文本内容(使用jQuery从HTML中读入),看起来像这些示例之一:

39.98
USD

或者多行以及额外的价格,例如:

 47.14 39.98
USD

数字可以格式化为

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

等(即不仅仅是正常的十进制数)。 我想要做的就是获得任何值。

这是我到目前为止所提出的,但我遇到了多线方法的问题,以及可能有两个数字的事实,我想忽略第一个。 我尝试过使用^和$以及“m”多线修改器的变体,但没有运气。

 var strRegex = new RegExp(".*(.*?).*", "g"); var strPrice = strContent.replace(strRegex, '$1'); 

如果有一种方法可以在字符串中定位span标记,那么我可以在这里使用jQuery(即它不是我们此时处理的DOM)。

尝试使用

 "[\s\S]*(.*?)[\s\S]*" 

代替

 ".*(.*?).*" 

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

 [\s\S] 

将会

 [\\s\\S] 

使用jQuery非常简单。 只需将HTML字符串包装在div中并像往常一样使用jQuery:

 var myHTML = "Span 1 HTMLSpan 2 HTML
USD"; var $myHTML = $("
" + myHTML + "
"); $myHTML.find("span").each(function() { alert($(this).html()); });

这是一个工作小提琴 。

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

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

你要这个?

 var str = "39.98
USD\n47.14\n\n40.00
USD"; var regex = /([^<]*?)<\/span>/g; var matches = str.match(regex); for (var i = 0; i < matches.length; i++) { document.write(matches[i]); document.write("
"); }

在这里测试: http : //jsfiddle.net/9LQGK/

matches数组将包含匹配项。 但是你想要的并不是很清楚。 什么there's potentially two numbers and I want to ignore the first one