js解析html属性列表

广告位招租
扫码页面底部二维码联系

因为项目的一个小组件里面需要对类似htm未经授权,禁止复制转载。著作权归作者所有,禁止商业用途转载。l属性字符串进行解析,找了很久没有找到对转载请注明出处:www.tangshuang.net未经授权,禁止复制转载。应的库来做,干脆自己写一个。

转载请注明出处:www.tangshuang.net本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。【未经授权禁止转载】本文版权归作者所有,未经授权不得转载。
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;
}

思路非常简单,就是遍历整个字符串,遇到特【关注微信公众号:wwwtangshuangnet】【作者:唐霜】殊标记就记录下来,再遇到特殊标记就结束一【本文受版权保护】【本文首发于唐霜的博客】个属性的查找,最后得到一个数组。

转载请注明出处:www.tangshuang.net未经授权,禁止复制转载。【原创不易,请尊重版权】