删除字符串中的特殊字符,但HTML标记内的特殊字符除外

时间:2017-06-29 11:52:48

标签: javascript regex

我有一个带有HTML标签和特殊字符(\,:)的字符串。我使用.replace(/[\:]/g,'')从字符串中删除了特殊字符,但问题是我的字符串包含具有样式属性的HTML标记,因此我使用的RegEx是从span标记的样式属性中删除:

我不想从span标记的样式属性中删除:

有人建议解决此问题吗?

查找以下链接到regex101 https://regex101.com/r/UAOuDG/1

4 个答案:

答案 0 :(得分:2)

不要这样做,但如果你必须这样做,那就有解决方法(不是100%保证)



No results found




正则表达式解释

var str = "By: <span style='background-color:#ffc8c4;'>Anita</span> <span style='background-color:#ffc8c4;'>Elberse</span> and : Sir Alex Ferguson";

console.log(str.replace(/<\w+(?=[ >])[^<>]*>|(:)/g, function(_o, O_) {
    return  O_ ? '' : _o;
}));

答案 1 :(得分:1)

DOM;正确的方式

我不打算添加DOM解决方法,因为我尊重每个主题下的标签。这个答案是针对那些如果不评论他们的理由不会让他们的日子过去的挫折者:

// Build our XPath query
var textNodes = document.evaluate("//body/text()", document, null, XPathResult.ANY_TYPE, null);
// Hold a pointer to current node
var currentText = textNodes.iterateNext(); 
list = [];
// Iterate over all nodes and store them
while (currentText) {
  list.push(currentText);
  currentText = textNodes.iterateNext();
}
// Modify all their contents
list.forEach(function(x) {
  x.textContent = x.textContent.replace(':', '')
});
<body>
  By: <span style='background-color:#ffc8c4;'>Anita</span> <span style='background-color:#ffc8c4;'>Elberse</span> and : Sir Alex Ferguson
</body>

答案 2 :(得分:0)

试试这个,

&#13;
&#13;
a = "By: <span style='background-color:#ffc8c4;'>Anita</span> <span style='background-color:#ffc8c4;'>Elberse</span> and Sir : Alex Ferguson"
b = a.replace(/(?!([^<]+>))+:/g, "")
console.log("original :", a);
console.log("replaced :", b);
&#13;
&#13;
&#13;

答案 3 :(得分:0)

首先注意 - 这不是一个万无一失的解决方案。如果你愿意,它很容易打破,但它会处理许多正常情况。现在,替换

((['"])(?:\\.|(?!\2).)*\2)|:|([^'":]*)

$1$3

将删除不在引号内的所有:

首先尝试匹配并捕获整个字符串。如果不匹配,则尝试匹配冒号。如果不匹配,则匹配并捕获下一个冒号或引号的所有内容。

现在,如果它是一个字符串,它就在捕获组1中。如果它不是字符串,也不是冒号,则它在组3中。(2使用内部来匹配冒号。)

为了保留我们想要的一切,我们用第1组和第1组替换匹配。 3,其中一个将有捕获的匹配。

请注意,匹配的字符串可以是单引号或双引号,也可以包含转义引号。

See it here at regex101

var str="By: <span style='background-color:#ffc8c4;'>Anita</span> <span style=\"background-color:#ffc8c4;\">Elberse</span> and Sir Alex Ferguson";

console.log(str.replace(/((['"])(?:\\.|(?!\2).)*\2)|:|([^'":]*)/g, '$1$3'));