Javascript 拆分值,如“0”;20px“&引用;“100%&引用;4.58 em“&引用-40px“&引用;。40em“&引用-80“&引用;。04“;分为值/单位对
我在js/jquery应用程序中使用CSS值,要使“20px”、“100%”或“4.58 em”等值可编辑,需要将它们分成值/单位对。我的正则表达式是不完整的,到目前为止,经过几个小时的修补,我已经想出了这个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
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”]