html 属性 js,js解析html属性列表

因为项目的一个小组件里面需要对类似html属性字符串进行解析,找了很久没有找到对应的库来做,干脆自己写一个。

function parseAttrs(source) {

let separator = /\s/;

let cursor = '';

let str = source.trim().replace(/\n+/g, ' ').replace(/\s+/g, ' ');

let length = str.length;

let attrs = [];

let current = null;

let type = 'key';

let reset = () => {

current = {

key: '',

value: ''

};

cursor = '';

};

reset();

for (let i = 0; i < length; i ++) {

let char = str.charAt(i);

let needPush = true;

// 遇到引号

if (char === '"' || char === "'") {

// 引号开始

if (!cursor) {

cursor = char;

type = 'value';

needPush = false;

}

// 引号结束

else if (cursor === char) {

cursor = '';

type = 'key';

needPush = false;

}

}

if (char === '=' && type === 'key') {

needPush = false;

}

if (/[\w\W]/.test(char) && needPush) {

current[type] += type === 'key' && char === ' ' ? '' : char;

}

// 遇到分隔符

if ((separator.test(char) && cursor === '') || i === length - 1) {

attrs.push(current);

reset();

}

}

return attrs;

}

思路非常简单,就是遍历整个字符串,遇到特殊标记就记录下来,再遇到特殊标记就结束一个属性的查找,最后得到一个数组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值