数字和单位的正则表达式

时间:2014-12-21 19:56:13

标签: javascript arrays regex match

我有一个带有数字和单位的动态字符串。

单位可以更改为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" ]

5 个答案:

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

如果你允许自己做出这些非常安全的假设:

  1. 所有单位指示符均由非数字(cm,px,pt,%)
  2. 组成
  3. 所有数值均由数字(10,12,14,16)
  4. 组成

    这个正则表达式将获得你的价值观:

    string.match(/(\d+)/g);
    

    这将得到您的单位:

    string.match(/\D+$/);
    

    你可以将它们结合起来:

    string.match(/(\d+)|\D+$/g);