我需要通过用█替换字符来删除已加载到字符串变量中的电子邮件中的健康信息。有问题的电子邮件需要在“健康问题?”之间添加内容。和“您工作了吗”替换了,但忽略了标签中出现的所有内容。另外,行通常用=符号包裹,这些新行,空格和=符号可以出现在标签的中间,也可以出现在用于标识开始和结束的字符串的中间。
示例:
(More content)
.....have any health issues? We currently do not have any health issues</sp=
an></li>
<li id=3D"m_-622133557606915713yui_3_16_0_ym19_1_1515713539439_17326" styl=
e=3D"margin-top:0;margin-bottom:0;vertical-align:middle;line-height:15pt;co=
lor:black"><span id=3D"m_-622133557606915713yui_3_16_0_ym19_1_1515713539439=
_17327" style=3D"font-family:Arial;font-size:11.0pt">Some more text.
Have
you worked.....(more content)
我想知道有一种方法可以使用一个或多个正则表达式在javascript中做到这一点,但我不知所措。
所需结果如下:
(More content)
.....have any health issues?███████████████████████████████████████████</sp=
an></li>
<li id=3D"m_-622133557606915713yui_3_16_0_ym19_1_1515713539439_17326" styl=
e=3D"margin-top:0;margin-bottom:0;vertical-align:middle;line-height:15pt;co=
lor:black"><span id=3D"m_-622133557606915713yui_3_16_0_ym19_1_1515713539439=
_17327" style=3D"font-family:Arial;font-size:11.0pt">███████████████
Have
you worked.....(more content)
答案 0 :(得分:1)
您可以使用两种replace
方法来解决此问题。第一个将从health issues?
到Have you worked
捕获的所有事物匹配为三个捕获组。我们对第二捕获小组感兴趣:
(health issues\?)([\s\S]*?)(Have\s+you\s+worked)
^^^^^^^^
我们在此捕获的组上运行第二个replace
方法,并用█
替换标记之外的每个字符。这是正则表达式:
(<\/?\w[^<>]*>)|[\s\S]
我们需要保留第一个捕获组(它们可能是HTML标记),并用提到的字符替换另一侧([\s\S]
)。
免责声明:这不是防弹的,因为正则表达式不应用于解析HTML标记。
演示:
var str = `(More content)
.....have any health issues? We currently do not have any health issues</sp=
an></li>
<li id=3D"m_-622133557606915713yui_3_16_0_ym19_1_1515713539439_17326" styl=
e=3D"margin-top:0;margin-bottom:0;vertical-align:middle;line-height:15pt;co=
lor:black"><span id=3D"m_-622133557606915713yui_3_16_0_ym19_1_1515713539439=
_17327" style=3D"font-family:Arial;font-size:11.0pt">Some more text.
Have
you worked.....(more content)`;
console.log(str.replace(/(health issues\?)([\s\S]*?)(Have\s+you\s+worked)/, function(match, $1, $2, $3) {
return $1 + $2.replace(/(<\/?\w[^<>]*>)|[\s\S]/g, function(match, $1) {
return $1 ? $1 : '█';
}) + $3;
}));