我有以下string
个HTML
个标签:
let str = "3 HTML tags are: <html>, <a href src='www.google.com'>, and <body>.";
我想用HTML
中的任意值大纲替换每个map
代码:
let map = {
"<html>":"<HTML>",
"<a*>":"<A HREF SRC='..'",
"<body>":"<BODY>"
};
但是,对于某些代码,例如<a href="..."
,我想简单地保留href
值,只需将<a href="www.google.com">
替换为<A HREF="www.google.com">
我尝试在相应密钥的值中添加通配符,但它只是硬编码为星号(*
)。
有没有办法实现这个目标?欢迎任何和所有文件!
我的JSFiddle可以找到here
答案 0 :(得分:1)
你可以试试这个
let str = "3 HTML tags are: <html>, <a href src='www.google.com'>, and <body>.";
let map = {
"<html>":"<HTML>",
"<a href src":"<A HREF SRC",
"<body>":"<BODY>"
};
str = str.replace(/<html>|<a href src|<body>/gi, function(matched){
return map[matched];
});
alert(str);
答案 1 :(得分:0)
我必须在侧面项目上做类似的事情。考虑一个我们可以调用matcher
的结构,它们基本上是以下结构的对象
let matcher = {
id: "htmlTag",
pattern: "<html>", // This can be string or regexp
replacer: "<HTML>", // This can be string or a function
}
我们可以有一个名为matchers
的对象数组,我们可以迭代它并使用str.replace(regexp|substr, newSubstr|function)
来获取我们需要的输出。
let matchers = [...];
let str = "3 HTML tags are: <html>, <a href src='www.google.com'>, and <body>.";
matchers.forEach(function(matcher){
console.log(`Before ${matcher.id}: ${str}`);
str = str.replace(matcher.pattern, matcher.replacer)
console.log(`After ${matcher.id}: ${str}`);
})
例如,如果要保存特定标记的src属性,可以定义一个replacer函数,该函数获取匹配的字符串,可以使用字符串拆分/正则表达式匹配来处理,以构建所需的新字符串(保留属性)我们需要等等。