Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 拆分值,如“0”;20px“&引用;“100%&引用;4.58 em“&引用-40px“&引用;。40em“&引用-80“&引用;。04“;分为值/单位对_Javascript_Jquery_Regex - Fatal编程技术网

Javascript 拆分值,如“0”;20px“&引用;“100%&引用;4.58 em“&引用-40px“&引用;。40em“&引用-80“&引用;。04“;分为值/单位对

Javascript 拆分值,如“0”;20px“&引用;“100%&引用;4.58 em“&引用-40px“&引用;。40em“&引用-80“&引用;。04“;分为值/单位对,javascript,jquery,regex,Javascript,Jquery,Regex,我在js/jquery应用程序中使用CSS值,要使“20px”、“100%”或“4.58 em”等值可编辑,需要将它们分成值/单位对。我的正则表达式是不完整的,到目前为止,经过几个小时的修补,我已经想出了这个 split_unit : function (v) { if (typeof v === 'string' && v !== ""){ var split = v.match(/^(\d+(?:\.\d+)?)(.*)$/); ret

我在js/jquery应用程序中使用CSS值,要使“20px”、“100%”或“4.58 em”等值可编辑,需要将它们分成值/单位对。我的正则表达式是不完整的,到目前为止,经过几个小时的修补,我已经想出了这个

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”是一种将“20px”、“100%”、“4.58 em”、“440”或“9.4”等值拆分为包含值和单位的对象的方法

它可以很好地处理诸如“20px”、“100%”、“4.58 em”、“440”或“9.4”之类的值

但是,正则表达式似乎不使用负值和以小数点开头的值,如so“-40px”、“.40em”、“-80”、“.04”

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

我该如何调整正则表达式或函数本身,使其能够处理负值和以小数点开头的值


谢谢你的回答和时间。

谢谢你的评论@Oleg V.Volkov,@Jaromanda X@Teemu我尝试了这些建议,这似乎对V.match(/^([-.\d]+(?:.\d+)(.*)$/)有效;谢谢奥列格

我将再运行一些测试,然后确认它100%有效

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”,“290px”,“100%”,“480”,“4.80”,“20px”,“100%”,“4.58 em”,“-40px”,“0.40em”,“-80”,“0.04”

谢谢你在@Oleg V.Volkov,@Jaromanda X@Teemu发表的评论,我已经尝试了这些建议,这似乎起到了作用;谢谢奥列格

我将再运行一些测试,然后确认它100%有效

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”,“290px”,“100%”,“480”,“4.80”,“20px”,“100%”,“4.58 em”,“-40px”,“.40em”,“-80”,“.04”

使用此完整代码:

// 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
成为我上面第一行代码返回的匹配项):


使用以下完整代码:

// 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
成为我上面第一行代码返回的匹配项):

尝试一下:

var re = /(-?\d*(?:\.\d+)?)\s*(\D+)/;
var res = re.exec(".40 %");//  ==> [".40 %", ".40", "%"]
修订,允许单位为空:

var re = /(-?\d*(?:\.\d+)?)\s*(\D*)/;
var res = re.exec(".40");//  ==> [".40 %", ".40", ""]
尝试一下:

var re = /(-?\d*(?:\.\d+)?)\s*(\D+)/;
var res = re.exec(".40 %");//  ==> [".40 %", ".40", "%"]
修订,允许单位为空:

var re = /(-?\d*(?:\.\d+)?)\s*(\D*)/;
var res = re.exec(".40");//  ==> [".40 %", ".40", ""]

value=parseFloat(v);单位=v.分割(值)[1]请参阅。使用
-?\d*\。?\d+
匹配浮点值。@Teemu看起来很不错。。。。直到您尝试使用
.40em
例如
value=parseFloat(v);unit=v.match(/[a-z%]+/i)[0]
如果您缺少
-
,只需将它们添加到
\d
中即可。比如
[-.\d]
或者什么的。
value=parseFloat(v);单位=v.分割(值)[1]请参阅。使用
-?\d*\。?\d+
匹配浮点值。@Teemu看起来很不错。。。。直到您尝试使用
.40em
例如
value=parseFloat(v);unit=v.match(/[a-z%]+/i)[0]
如果您缺少
-
,只需将它们添加到
\d
中即可。类似于
[-.\d]
或其他什么。这似乎不适用于“4.80”、“-80”、“.04”,在这种情况下,正则表达式应该匹配整个值并返回空/空单位。“.40”变为=[”,“,”,索引:0,输入:“.40”]“4.80”变为=[“4.”,“4”,“,”,索引:0,输入:“4.80”]这似乎与“4.80”,“-80”,“.04”不起作用,在这种情况下,正则表达式应匹配整个值并返回空/空单位。“.40”变为=[”,“,”,索引:0,输入:“.40”]“4.80”变为=[“4.”,“4”,“,”,索引:0,输入:“4.80”]