simple-frame-unit
Version:
基于vue2 研发的与simple-data后端配合使用的组件
50 lines (45 loc) • 1.73 kB
JavaScript
/**
* 重置产品介绍中图片地址
* @name getImgSrc
* */
export default function replaceUrl(htmlStr, url, preview = false) {
try {
const imgReg = /<img.*?(?:>|\/>)/gi // 匹配图片中的img标签
const videoReg = /<video(([\s\S])*?)<\/video>/gi // 匹配图片中的img标签
return htmlStr.replace(imgReg, (match, capture) => {
return resetString(match, preview ? "image" : "img", url)
}).replace(videoReg, (match, capture) => {
return resetString(match, "video", url)
});
} catch (e) {
//TODO handle the exception
return htmlStr;
}
}
// 替换文件预览地址
function resetString(match, type, url) {
const srcReg = /src=[\'\"]?([^\'\"]*)[\'\"]?/i // 匹配图片中的src
let srcStr = match.match(srcReg)
let params = getUrlParams(srcStr[1])
let isUpload = Object.keys(params).length > 0 && hasObject(params, "t")
let str = srcStr[1].slice(srcStr[1].indexOf('/admin-api'), srcStr[1].length)
let dome = match.replace(srcReg, `src="${url + str}"`)
if (isUpload) {
return type === 'image' ? dome.replace('img', `ed-image preview`) + '</ed-image>' : dome
} else {
return match
}
}
// 检测对象中是否包含指定字段
function hasObject(thisArg, ...argArray) {
return Object.prototype.hasOwnProperty.call(thisArg, ...argArray)
}
function getUrlParams(url) {
// \w+ 表示匹配至少一个(数字、字母及下划线), [\u4e00-\u9fa5]+ 表示匹配至少一个中文字符
let pattern = /(\w+|[\u4e00-\u9fa5]+)=(\w+|[\u4e00-\u9fa5]+)/ig;
let result = {};
url.replace(pattern, ($, $1, $2) => {
result[$1] = $2;
})
return result
}