首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将“20 em”、"100%“、”4.58em“、”-40 em“、".40em”、"-80“、".04”等值拆分为值/单位对

将“20 em”、"100%“、”4.58em“、”-40 em“、".40em”、"-80“、".04”等值拆分为值/单位对
EN

Stack Overflow用户
提问于 2016-02-09 12:17:34
回答 3查看 274关注 0票数 1

我正在使用js/jquery应用程序中的CSS值,为了使诸如“20 be”或"100%“或”4.58em“这样的值可编辑,需要将它们分离为值/单元对。我的判断力是零碎的,到目前为止,经过几个小时的修修补补,我已经想出了这个办法。

代码语言:javascript
复制
split_unit : function (v) {
    if (typeof v === 'string' && v !== ""){
        var split = v.match(/^(\d+(?:\.\d+)?)(.*)$/);
        return {'value':split[1].trim(),  'unit':split[2].trim()};
    }
    else{
        return { 'value':v, 'unit':"" }
    }
}

"split_unit“是将”20 to“、"100%”、“4.58em”、"440“或"9.4”这样的值除以包含值和单位的对象的方法。

它与“20 em”、"100%“、”4.58em“、"440”或"9.4"等值工作得很好,

然而,正则表达式似乎没有处理以小数点开始的负值和值,比如so “-40 80”、".40em“、"-80”、".04"等等。

我可以在函数的开头替换小数点和'-‘减号/连字符,然后将其附加到值字符串的末尾,但是必须有一种更优雅的方法。

我如何调整正则表达式或函数本身,使其与负值和以小数点开始的值一起工作?

谢谢你的回答和时间。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-02-09 12:58:12

谢谢你的评论@OlegV.Volkov,@Jaromanda @Teemu我已经尝试了这些建议,这似乎是有效的v.match(/^(-.\d+(?:.\d+)?)(.*)$/);谢谢Oleg .

我将运行更多的测试,然后确认这是100%的工作。

代码语言:javascript
复制
split_unit : function (v) {
    if (typeof v === 'string' && v !== ""){
        var split = v.match(/^([-.\d]+(?:\.\d+)?)(.*)$/);
        return {'value':split[1].trim(),  'unit':split[2].trim()};
    }
    else{
        return { 'value':v, 'unit':"" }
    }
}

可以很好地处理以下字符串:

"-.280em“、”290 em“、"100%”、"480“、"4.80”、“20 em”、"100%“、”4.58em“、”-40 em“、".40em”、"-80“、".04”

票数 1
EN

Stack Overflow用户

发布于 2016-02-09 13:01:54

使用以下完整代码:

代码语言:javascript
复制
// Getting all unit+value from a string:

var m='40px 80px 45% .30px -25em'.match(/((-?)(\d)*(\.?))(\d)+(%|\w)*/gmi);

// Getting values :
var val1= m[0].match(/((-?)(\d)*(\.?))(\d)+/gmi)[0];

// Getting Unit :
var unit1=m[0].replace(/((-?)(\d)*(\.?))(\d)+/gmi,'')[0];

因此,根据您的代码,您可以使用上面的代码(让v是从我上面的第一行代码返回的匹配):

代码语言:javascript
复制
    split_unit : function (v) {
        if (typeof v === 'string' && v !== ""){

            return {'value':v.match(/((-?)(\d)*(\.?))(\d)+/gmi)[0], 
                    'unit':v.replace(/((-?)(\d)*(\.?))(\d)+/gmi,'')[0]};
        }
        else{
            return { 'value':v, 'unit':"" }
        }
    }
票数 0
EN

Stack Overflow用户

发布于 2016-02-09 13:13:58

试一试:

代码语言:javascript
复制
var re = /(-?\d*(?:\.\d+)?)\s*(\D+)/;
var res = re.exec(".40 %");//  ==> [".40 %", ".40", "%"]

修订,允许单元为null:

代码语言:javascript
复制
var re = /(-?\d*(?:\.\d+)?)\s*(\D*)/;
var res = re.exec(".40");//  ==> [".40 %", ".40", ""]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35291870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档