我有一个带有数字和单位的动态字符串。
单位可以更改为cm,%,...但是对于所有4个数字,它始终相同。喜欢“10px 12px 14px 16px”不“10px 12%14cm 16in”
我需要一个reqular表达式给我一个如下结果:
string = "10px 12px 14px 16px"
result = array = [ "10 12 14 16", "px" ]
考虑reqular表达式应该匹配任何不是上面提到的单位。
我试过这个但没有运气:
var string = "10px 11px 13px 14px";
var match = string.match(/([0-9]+)(.*)/);
result: Array [ "10px 11px 13px 14px", "10", "px 11px 13px 14px" ]
答案 0 :(得分:2)
你可以这样做:
result = [string.match(/\d+/g).join(' '), string.match(/[a-zA-Z%]+/g).pop()]
答案 1 :(得分:0)
使用正则表达式 - 您可以使用.split
将字符串拆分为数组,然后使用pop
获取最后一个值:
var str = "10px 12px 14px 16px" ;
var units = str.split(/[0-9]+/g).pop(); // pop to get the last value
var nums = str.split(" ").map(function(x){ return parseInt(x, 10); }).join(" ");
var result = [nums, units];
console.log(result);
答案 2 :(得分:0)
您可以先确定单位:
var unit = string.match(/\d+(\S+)/).pop()
然后,您可以从字符串中删除它们,并将数组放在一起:
result = [string.replace(new RegExp(unit,'g'),''), unit]
答案 3 :(得分:0)
您可以使用反向引用来检查所有单位是否相同:
s = /^(-?[0-9]+)([^ ]*) *(-?[0-9]+)\2 *(-?[0-9]+)\2 *(-?[0-9]+)\2$/.exec(x);
if (s) {
result = [s[1], s[3], s[4], s[5], s[2]];
...
} else {
// No match (e.g. units are different)
}
答案 4 :(得分:0)
如果你允许自己做出这些非常安全的假设:
这个正则表达式将获得你的价值观:
string.match(/(\d+)/g);
这将得到您的单位:
string.match(/\D+$/);
你可以将它们结合起来:
string.match(/(\d+)|\D+$/g);