如何匹配JavaScript和正则表达式?

时间:2009-05-27 11:37:12

标签: javascript html regex

我有以下HTML:

<span id="UnitCost5">$3,079.95 to $3,479.95</span>

我想使用Javascript和Regex来获得所有数字匹配。

所以我希望我的脚本函数返回:3,079.95和3,479.95

请注意,文字可能有所不同,所以我需要解决方案尽可能通用,可能会是这样的:

<span id="UnitCost5">$3,079.95 And Price $3,479.95</span>

6 个答案:

答案 0 :(得分:3)

所有数字都将匹配:

\.?\d[\d.,]*

这假设您查找的数字可以以小数点开头。如果他们不能,这将起作用(并且可能产生更少的误报):

\d[\d.,]*

请注意,数字格式存在不同的当地习俗。

我假设你使用适当的方法来获取你想要处理的HTML节点的文本值,并且HTML解析不是练习的一部分。

答案 1 :(得分:1)

您不想捕获所有号码,否则您也会获得ID中的5。我想,你要找的是这样的数字:$#,###.##

以下是表达式:

/\$[0-9]{1,3}(,[0-9]{3})*(\.[0-9]+)?/
  • \$ 美元符号
  • [0-9]{1,3} 一至三位数字
  • (,[0-9]{3})* [可选]:数字三元组,前面有逗号
  • (\.[0-9]+)? [可选]:更多数字,前面有句号

答案 2 :(得分:1)

/(?:\d{1,3},)*\d{1,3}(?:\.\d+)?/g;

让我们将其分解为部分解释:

  • (?:\ d {1,3},)* - 匹配以千分隔符分隔的任何数字
  • \ d {1,3} - 匹配小数点前的数字
  • (?:。\ d +) - 匹配任意小数位数
  • 标记'g' - 进行全局搜索以查找字符串中的所有匹配项

你可以像这样使用它:

var regex = /(?:\d{1,3},)*\d{1,3}(?:\.\d+)?/g;
var numbers = "$3,079.95 And Price $3,479.95".match(regex);
// numbers[0] = 3,079.95
// numbers[1] = 3,479.95

答案 3 :(得分:0)

一个非常简单的解决方案是以下方案。请注意,它还会匹配一些无效的数字字符串,例如$..44,.777

\$[0-9,.]+

答案 4 :(得分:0)

(function () {
    var reg = /\$([\d\.,]+)\s[\w\W]+\s\$([\d\.,]+)$/;


    // this function used to clean inner html
    function trim(str) {
        var str = str.replace(/^\s\s*/, ''),
            ws = /\s/,
            i = str.length;
        while (ws.test(str.charAt(--i)));
        return str.slice(0, i + 1);
    }

    function getNumbersFromElement(elementId) {
        var el = document.getElementById(elementId),
            text = trim(el.innerHTML), 
            firstPrice,
            secondPrice,
            result;

        result = reg.exec(text);

        if (result[1] && result[2]) {
            // inside this block we have valid prices
            firstPrice = result[1];
            secondPrice = result[2];
            // do whatever you need
            return firstPrice + ' AND ' + secondPrice;
        } else {
            return null; // otherwise 
        }
    }
    // usage:
    getNumbersFromElement('UnitCost5');
})();

答案 5 :(得分:0)

以下内容将返回字符串

中所有价格的数组
function getPrices(str) {
    var reg = /\$([\d,.]+)/g;
    var prices =[];
    var price;
    while((price = reg.exec(str))!=null) {
        prices.push(price);
    }
    return prices;
}

编辑:请注意,正则表达式本身可能会返回一些误报