正则表达式:如何替换样式标签内大括号之外的html内容中的大括号?

时间:2018-06-29 01:56:55

标签: javascript regex

我有如下html内容。我想将“ {”替换为“ {{”,将“ }”替换为“ }}”。但是我想在样式标签中保留单个大括号。

注意:我使用的是javascript,因为它存储在db中,所以我从数据库中读取html内容。

<html>
<head>
    <style type="text/css" rel="stylesheet" media="all">
    p {
        font-size: 14px;
    }
    </style>
</head>
<body>
    <p>My name is {name}</p>
    <p>My age is {age}</p>
</body>

预期输出如下。

<html>
<head>
    <style type="text/css" rel="stylesheet" media="all">
    p {
        font-size: 14px;
    }
    </style>
</head>
<body>
    <p>My name is {{name}}</p>
    <p>My age is {{age}}</p>
</body>

2 个答案:

答案 0 :(得分:1)

尝试一下

let str = `<html>
<head>
    <style type="text/css" rel="stylesheet" media="all">
    p {
        font-size: 14px;
    }
    </style>
</head>
<body>
    <p>My name is {name}</p>
    <p>My age is {age}</p>
</body>`;
console.log(str.replace(/({|})(?=[^.{1}\s*])/g, "$1$1"));

答案 1 :(得分:1)

也许这个正则表达式会有所帮助:

str.replace(/\{(\w+)\}/gm, "{{$1}}")

请参见Regex101上的this

let str = `<html>
<head>
    <style type="text/css" rel="stylesheet" media="all">
    p {
        font-size: 14px;
    }
    </style>
</head>
<body>
    <p>My name is {name}</p>
    <p>My age is {age}</p>
</body>`;

console.log(str.replace(/\{(\w+)\}/gm, "{{$1}}"))

此正则表达式将搜索大括号中包含的任何单个字母数字字符串。括号捕获了这个内部的“单词”。所有这些都被捕获的单词替换,并用双花括号将其括起来。

任何打开的花括号后跟空格或换行符都将不匹配。

相关问题