我有以下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>
答案 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;
让我们将其分解为部分解释:
你可以像这样使用它:
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;
}
编辑:请注意,正则表达式本身可能会返回一些误报