typescript/javascript 解析css属性值中的长度单位
常用单位的字典树
说明:
child
: 子节点
exist
: 从根节点到当前节点组成的字符串是否是一个符合要求的单位
例: 如下json对象表示字符串vb
是一个符合要求的单位
b
节点的exist属性为false
表示字符串b
不是一个符合要求的单位
在child属性下v
的exist值为true
表示字符串vb
不是一个符合要求的单位
注意: 解析时是从被解析的字符串末尾向前解析的,因为单位是在最后的
完整的字典树在文章末尾
child: {
'b': {
exist: false,
child: {
'v': {
exist: true,
child: {
}
}
}
}
主要代码
参数说明:
- object:
unitMap
: 保存着用于解析str
的字典树(见文章末尾 - string:
str
: 待解析的字符串 - 可选参数
- boolean:
caseSensitive
: 是否大小写敏感(默认为false
)
- boolean:
- 返回值是一个json对象
{unit: 单位, number: 数值}
typescript
checkUnit(unitMap: any, str: string, caseSensitive?: boolean): {
unit: string,
number: number
} {
if (!unitMap || !str) {
return; }
if (!caseSensitive) {
str = str.toLocaleLowerCase(); }
let i: number, isMatch = false;
for (i = str.length - 1; i >= 0; i--) {
const ascii = str.charCodeAt(i);
if (ascii >= 48 && ascii <= 57) {
isMatch = unitMap.exist;
break;
} else {
if (!unitMap.child[str[i]]) {
break; }
unitMap = unitMap