为了匹配比较复杂或不标准的html标签,并从中取出属性的值
从a标签中获取href属性值的正则表达式
/<a(?:[^'">]*(?:"[^"]*"|'[^']*')(?<! href=))*[^'">]* href=(?:'([^']+)'|"([^"]+)").*(?:>[^<>]*<\/a|\/)>/
通用html标签属性值提取的正则表达式
const getRegExp = (tagName, attrName) => new RegExp(`<${tagName}(?:[^'">]*(?:"[^"]*"|'[^']*')(?<! ${attrName}=))*[^'">]* ${attrName}=(?:'([^']+)'|"([^"]+)"|([^'" <>]+)).*(?:>[^<>]*<\/${tagName}|\/)>`)
htmlStr.match(getRegExp(tagName, attrName))?.slice(1,4).filter(Boolean)[0]
使用案例
`<a data-t=" href=t1" href="t2"></a>`.match(getRegExp('a', 'href'))?.slice(1,4).filter(Boolean)[0]
复杂情况
`<a t-href=href t-href="mock href=" t-href='mock href="t2"' href="real-href" t-href=href-t3>111</a>`.match(getRegExp('a', 'href'))?.slice(1,4).filter(Boolean)[0]