用可选的尾随字符替换字符串

时间:2018-01-30 03:28:39

标签: javascript regex

我有以下stringHTML个标签:

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

2 个答案:

答案 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函数,该函数获取匹配的字符串,可以使用字符串拆分/正则表达式匹配来处理,以构建所需的新字符串(保留属性)我们需要等等。